fix: se limpia la casa

This commit is contained in:
sinergia 2023-08-14 14:15:09 -05:00
parent 6565be82a2
commit dcd88381ee

67
sale.py
View File

@ -14,25 +14,24 @@ from trytond.i18n import gettext
from trytond.exceptions import UserError from trytond.exceptions import UserError
from trytond.modules.currency.fields import Monetary from trytond.modules.currency.fields import Monetary
from trytond.exceptions import UserError
__all__ = ['Sale', 'SalePaymentForm', 'WizardSalePayment', __all__ = ['Sale', 'SalePaymentForm', 'WizardSalePayment',
'WizardSaleReconcile'] 'WizardSaleReconcile']
class Sale(metaclass=PoolMeta): class Sale(metaclass=PoolMeta):
__name__ = 'sale.sale' __name__ = 'sale.sale'
payments = fields.One2Many('account.statement.line', 'sale', 'Payments') payments = fields.One2Many('account.statement.line', 'sale', 'Payments')
paid_amount = fields.Function(fields.Numeric('Paid Amount', readonly=True), paid_amount = fields.Function(fields.Numeric('Paid Amount', readonly=True),
'get_paid_amount') 'get_paid_amount')
residual_amount = fields.Function(fields.Numeric('Residual Amount'), residual_amount = fields.Function(fields.Numeric('Residual Amount'),
'get_residual_amount', searcher='search_residual_amount') 'get_residual_amount',
searcher='search_residual_amount')
sale_device = fields.Many2One('sale.device', 'Sale Device', sale_device = fields.Many2One('sale.device', 'Sale Device',
domain=[('shop', '=', Eval('shop'))], domain=[('shop', '=', Eval('shop'))],
depends=['shop'], states={ depends=['shop'], states={
'readonly': Eval('state') != 'draft', 'readonly': Eval('state') != 'draft',
} })
)
@classmethod @classmethod
def __setup__(cls): def __setup__(cls):
@ -68,7 +67,7 @@ class Sale(metaclass=PoolMeta):
to_post = set() to_post = set()
for sale in sales: for sale in sales:
grouping = getattr(sale.party, 'sale_invoice_grouping_method', grouping = getattr(sale.party, 'sale_invoice_grouping_method',
False) False)
if getattr(sale, 'invoices', None) and not grouping: if getattr(sale, 'invoices', None) and not grouping:
for invoice in sale.invoices: for invoice in sale.invoices:
if not invoice.state == 'draft': if not invoice.state == 'draft':
@ -98,7 +97,7 @@ class Sale(metaclass=PoolMeta):
if not sale.invoices and sale.invoice_method == 'order': if not sale.invoices and sale.invoice_method == 'order':
raise UserError(gettext( raise UserError(gettext(
'sale_payment.not_customer_invoice', 'sale_payment.not_customer_invoice',
reference=sale.reference)) reference=sale.reference))
to_post = cls.set_invoices_to_be_posted(sales) to_post = cls.set_invoices_to_be_posted(sales)
if to_post: if to_post:
@ -143,7 +142,7 @@ class Sale(metaclass=PoolMeta):
@classmethod @classmethod
def get_residual_amount(cls, sales, name): def get_residual_amount(cls, sales, name):
return {s.id: s.total_amount - s.paid_amount if s.state != 'cancelled' return {s.id: s.total_amount - s.paid_amount if s.state != 'cancelled'
else Decimal(0) for s in sales} else Decimal(0) for s in sales}
@classmethod @classmethod
def search_residual_amount(cls, name, clause): def search_residual_amount(cls, name, clause):
@ -163,16 +162,16 @@ class Sale(metaclass=PoolMeta):
).select( ).select(
sale.id, sale.id,
where=((sale.total_amount_cache != None) & where=((sale.total_amount_cache != None) &
(sale.state.in_([ (sale.state.in_([
'draft', 'draft',
'quotation', 'quotation',
'confirmed', 'confirmed',
'processing', 'processing',
'done']))), 'done']))),
group_by=(sale.id), group_by=(sale.id),
having=(Operator(sale.total_amount_cache - having=(Operator(sale.total_amount_cache -
Sum(Coalesce(payline.amount, 0)), value) Sum(Coalesce(payline.amount, 0)), value)
)) ))
return [('id', 'in', query)] return [('id', 'in', query)]
@classmethod @classmethod
@ -192,14 +191,14 @@ class SalePaymentForm(ModelView):
'Sale Payment Form' 'Sale Payment Form'
__name__ = 'sale.payment.form' __name__ = 'sale.payment.form'
journal = fields.Many2One('account.statement.journal', 'Statement Journal', journal = fields.Many2One('account.statement.journal', 'Statement Journal',
domain=[ domain=[
('id', 'in', Eval('journals', [])), ('id', 'in', Eval('journals', [])),
], ],
depends=['journals'], required=True) depends=['journals'], required=True)
journals = fields.One2Many('account.statement.journal', None, journals = fields.One2Many('account.statement.journal', None,
'Allowed Statement Journals') 'Allowed Statement Journals')
payment_amount = Monetary('Payment amount', required=True, payment_amount = Monetary('Payment amount', required=True,
currency='currency', digits='currency') currency='currency', digits='currency')
party = fields.Many2One('party.party', 'Party', readonly=True) party = fields.Many2One('party.party', 'Party', readonly=True)
currency = fields.Many2One('currency.currency', 'Currency', readonly=True) currency = fields.Many2One('currency.currency', 'Currency', readonly=True)
@ -208,10 +207,10 @@ class WizardSalePayment(Wizard):
'Wizard Sale Payment' 'Wizard Sale Payment'
__name__ = 'sale.payment' __name__ = 'sale.payment'
start = StateView('sale.payment.form', start = StateView('sale.payment.form',
'sale_payment.sale_payment_view_form', [ 'sale_payment.sale_payment_view_form', [
Button('Cancel', 'end', 'tryton-cancel'), Button('Cancel', 'end', 'tryton-cancel'),
Button('Pay', 'pay_', 'tryton-ok', default=True), Button('Pay', 'pay_', 'tryton-ok', default=True),
]) ])
pay_ = StateTransition() pay_ = StateTransition()
def default_start(self, fields): def default_start(self, fields):
@ -225,10 +224,10 @@ class WizardSalePayment(Wizard):
raise UserError(gettext('sale_payment.not_sale_device')) raise UserError(gettext('sale_payment.not_sale_device'))
return { return {
'journal': sale_device.journal.id 'journal': sale_device.journal.id
if sale_device.journal else None, if sale_device.journal else None,
'journals': [j.id for j in sale_device.journals], 'journals': [j.id for j in sale_device.journals],
'payment_amount': sale.total_amount - sale.paid_amount 'payment_amount': sale.total_amount - sale.paid_amount
if sale.paid_amount else sale.total_amount, if sale.paid_amount else sale.total_amount,
'currency': sale.currency and sale.currency.id, 'currency': sale.currency and sale.currency.id,
'party': sale.party.id, 'party': sale.party.id,
} }
@ -247,7 +246,7 @@ class WizardSalePayment(Wizard):
], order=[('date', 'DESC')]) ], order=[('date', 'DESC')])
if not statements: if not statements:
raise UserError(gettext('sale_payment.not_draft_statement', raise UserError(gettext('sale_payment.not_draft_statement',
journal=form.journal.name)) journal=form.journal.name))
if not sale.number: if not sale.number:
Sale.set_number([sale]) Sale.set_number([sale])
@ -258,7 +257,7 @@ class WizardSalePayment(Wizard):
if not account: if not account:
raise UserError(gettext( raise UserError(gettext(
'sale_payment.party_without_account_receivable', 'sale_payment.party_without_account_receivable',
party=sale.party.name)) party=sale.party.name))
if form.payment_amount: if form.payment_amount:
return StatementLine( return StatementLine(