set sale_date, invoice_date and accounting_date

from date of account statement
This commit is contained in:
Wilson Gomez 2023-06-28 10:37:48 -05:00
parent 60335e7da5
commit e06de6fcf4
1 changed files with 6 additions and 155 deletions

161
sale.py
View File

@ -43,12 +43,6 @@ class Sale(metaclass=PoolMeta):
invoice_number = fields.Char('Invoice Number', states={'readonly': True})
invoice_date = fields.Date('Invoice Date')
invoice = fields.Many2One('account.invoice', 'Invoice')
# Migrated to sale_shop
# payments = fields.One2Many('account.statement.line', 'sale', 'Payments')
# paid_amount = fields.Function(fields.Numeric('Paid Amount', digits=(16, 2)),
# 'get_paid_amount')
# residual_amount = fields.Function(fields.Numeric('Residual Amount',
# digits=(16, 2), readonly=True), 'get_residual_amount')
sale_device = fields.Many2One('sale.device', 'Sale Device',
domain=[('shop', '=', Eval('shop'))], depends=['shop'], states=STATES)
position = fields.Char('Position', states=STATES)
@ -95,12 +89,6 @@ class Sale(metaclass=PoolMeta):
]
return domain
# @staticmethod
# def default_sale_device():
# User = Pool().get('res.user')
# user = User(Transaction().user)
# return user.sale_device and user.sale_device.id or None
@classmethod
def process(cls, sales):
configuration = Pool().get('sale.configuration')(1)
@ -109,7 +97,6 @@ class Sale(metaclass=PoolMeta):
invoice = sale.invoices[0]
if invoice.state in ('posted', 'paid'):
continue
# cls.recheck_taxes(sale)
if hasattr(configuration, 'password_force_assign') and configuration.password_force_assign and sale.shipment_state == 'none':
cls.validate_stock(sale)
cls.process_pos(sale)
@ -128,21 +115,6 @@ class Sale(metaclass=PoolMeta):
if product.quantity <= product_ids[product.id]:
raise SaleValidationError(gettext('sale_pos.msg_product_quantity', s=product.rec_name))
# @classmethod
# def recheck_taxes(cls, sale):
# for line in sale.lines:
# vat_required = None
# if line.product and line.product.account_category:
# for txr in line.product.account_category.customer_taxes_used:
# if txr.type == 'percentage' and txr.rate > 0:
# vat_required = txr.id
# break
# if vat_required:
# tax_obj = [t.id for t in line.taxes if t.rate and t.rate > 0]
# if vat_required not in tax_obj:
# raise ProductMissingTaxError(
# gettext('sale_pos.msg_missing_tax', s=line.product.rec_name))
def get_tax_amount(self):
# Esto es necesario para impuestos de Licores y Cigarrillos
values = self._get_taxes().values()
@ -167,133 +139,6 @@ class Sale(metaclass=PoolMeta):
amounts.append(val)
return res + sum(amounts)
# @classmethod
# def import_data(cls, fields_names, data):
# pool = Pool()
# Product = pool.get('product.product')
# Party = pool.get('party.party')
# Invoice = pool.get('account.invoice')
# SaleLine = pool.get('sale.line')
# Voucher = pool.get('account.voucher')
# PaymentMode = pool.get('account.voucher.paymode')
# Tax = pool.get('account.tax')
# user_ = pool.get('res.user')(Transaction().user)
# shop_id = user_.shop.id
# device_id = user_.sale_device.id
# count = 0
#
# # number_sales = list(set([v[0] for v in data[1:]]))
# code_products = list(set([v[6] for v in data[1:]]))
# number_parties = list(set([v[4] for v in data[1:]]))
#
# products = Product.search([
# ('code', 'in', code_products),
# ('salable', '=', 'true')
# ])
# products = [p.code for p in products]
# not_product = [code for code in code_products if code not in products]
# if not products or len(not_product) > 0:
# not_product = code_products if not products else not_product
# not_product = ', '.join(map(str, not_product))
# raise ImportSalesError(
# gettext('sale_pos.msg_import_data_sale', field='producto', s=not_product))
#
# parties = Party.search([
# ('id_number', 'in', number_parties),
# ])
# parties = [p.id_number for p in parties]
# not_party = [party for party in number_parties if party not in parties]
# if not parties or len(not_party) > 0:
# not_party = number_parties if not parties else not_party
# not_party = ', '.join(map(str, not_party))
# raise ImportSalesError(
# gettext('sale_pos.msg_import_data_sale', field='tercero', s=not_party))
#
# sale_to_create = {}
# sales_to_pay = []
# for row in data[1:]:
# code_ = row[6]
# products = Product.search([
# ('code', '=', code_)
# ])
# product = products[0]
# day, month, year = row[3].split('/')
# sale_date = date(int(year), int(month), int(day))
# partys = Party.search([
# ('id_number', '=', row[4])
# ])
# party = partys[0]
# if row[0] not in sale_to_create.keys():
# # with Transaction().set_context(ctx):
# sale, = cls.create([{
# 'sale_date': sale_date,
# 'party': party.id,
# 'number': row[0],
# 'invoice_number': row[0],
# 'invoice_date': sale_date,
# 'invoice_type': 'P',
# 'description': row[1],
# 'reference': row[2],
# 'payment_term': 1,
# 'shop': shop_id,
# 'sale_device': device_id,
# 'invoice_address': party.address_get(type='invoice'),
# 'shipment_address': party.address_get(type='delivery'),
# }])
# sale.on_change_party()
# sale.save()
# sale_to_create[row[0]] = sale.id
# payment_modes = PaymentMode.search([
# ('id', '=', row[10])
# ])
# if not payment_modes:
# not_party
# raise ImportSalesError(
# gettext('sale_pos.msg_import_data_sale', field='modo de pago', s=row[10]))
# sales_to_pay.append({
# 'sale': sale,
# 'payment_mode': payment_modes[0]
# })
# count += 1
# sale_id = sale_to_create[row[0]]
# tax_imp = list(product.customer_taxes_used)
# if row[9]:
# tax = Tax.search(['id', '=', row[9]])
# tax_imp.extend(tax)
# line = {
# 'sale': sale_id,
# 'product': product.id,
# 'quantity': row[7],
# 'description': row[5],
# 'unit_digits': product.sale_uom.digits,
# 'unit': product.sale_uom,
# 'unit_price': Decimal(row[8]),
# 'discount': Decimal('0.00'),
# 'taxes': [('add', tax_imp)],
# }
# SaleLine.create([line])
#
# for p in sales_to_pay:
# sale = p['sale']
# payment_mode = p['payment_mode']
# cls.store_cache([sale])
# sale = cls.process_pos(sale)
# invoice = sale.invoice
# invoice.accounting_date = sale.invoice_date
# cls.post_invoices(sale)
# sale.state = 'done'
# sale.invoice_state = 'paid'
# sale.save()
# vouchers = Invoice.create_voucher([invoice])
# for voucher in vouchers:
# voucher.date = sale.invoice_date
# voucher.payment_mode = payment_mode
# voucher.save()
# Voucher.process([voucher])
# Voucher.post([voucher])
#
# return count
def create_invoice(self):
'Create and return an invoice'
pool = Pool()
@ -337,6 +182,12 @@ class Sale(metaclass=PoolMeta):
self.copy_resources_to(invoice)
return invoice
def _get_invoice_sale(self):
invoice = super(Sale, self)._get_invoice_sale()
invoice.invoice_date = sale.sale_date
invoice.accounting_date = sale.sale_date
return invoice
def _get_authorization(self, sale):
authorization_id = None
if sale.untaxed_amount_cache >= 0: