mirror of
https://bitbucket.org/presik/trytonpsk-sale_pos.git
synced 2023-12-14 07:13:02 +01:00
Fix
This commit is contained in:
parent
2213ced1b0
commit
fc788fa86b
2039
sale-new.py
2039
sale-new.py
File diff suppressed because it is too large
Load diff
293
sale.py
293
sale.py
|
@ -40,14 +40,15 @@ class Sale(metaclass=PoolMeta):
|
|||
help='The goods are picked up by the customer before the sale, so no '
|
||||
'shipment is created.')
|
||||
pos_create_date = fields.DateTime('Create Date', readonly=True)
|
||||
payments = fields.One2Many('account.statement.line', 'sale', 'Payments')
|
||||
paid_amount = fields.Function(fields.Numeric('Paid Amount', digits=(16, 2)),
|
||||
'get_paid_amount')
|
||||
invoice_number = fields.Char('Invoice Number')
|
||||
invoice_date = fields.Date('Invoice Date')
|
||||
invoice = fields.Many2One('account.invoice', 'Invoice')
|
||||
residual_amount = fields.Function(fields.Numeric('Residual Amount',
|
||||
digits=(16, 2), readonly=True), 'get_residual_amount')
|
||||
# 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)
|
||||
|
@ -67,10 +68,6 @@ class Sale(metaclass=PoolMeta):
|
|||
cls.party.on_change.add(fname)
|
||||
|
||||
cls._buttons.update({
|
||||
'wizard_sale_payment': {
|
||||
'invisible': Eval('state') == 'done',
|
||||
'readonly': Not(Bool(Eval('lines'))),
|
||||
},
|
||||
'wizard_generate_invoice': {
|
||||
'invisible': Eval('state').in_(['done', 'processing', 'cancel']),
|
||||
'readonly': Not(Bool(Eval('lines'))),
|
||||
|
@ -311,7 +308,6 @@ class Sale(metaclass=PoolMeta):
|
|||
invoice.turn = self._get_turn()
|
||||
invoice.save()
|
||||
Invoice.update_taxes([invoice])
|
||||
print('ingresa a sale_pos')
|
||||
return invoice
|
||||
|
||||
def _get_authorization(self, sale):
|
||||
|
@ -588,27 +584,6 @@ class Sale(metaclass=PoolMeta):
|
|||
cls.do_reconcile([sale])
|
||||
cls.update_state([sale])
|
||||
|
||||
@classmethod
|
||||
def get_paid_amount(cls, sales, names):
|
||||
result = {n: {s.id: Decimal(0) for s in sales} for n in names}
|
||||
for name in names:
|
||||
for sale in sales:
|
||||
for payment in sale.payments:
|
||||
result[name][sale.id] += payment.amount
|
||||
result[name][sale.id] += sale.get_total_vouchers_amount()
|
||||
return result
|
||||
|
||||
def get_residual_amount(self, name=None):
|
||||
total = self.total_amount_cache
|
||||
if not total:
|
||||
total = self.total_amount
|
||||
return (total - self.paid_amount)
|
||||
|
||||
@classmethod
|
||||
@ModelView.button_action('sale_pos.wizard_sale_payment')
|
||||
def wizard_sale_payment(cls, sales):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
def wizard_generate_invoice(cls, sales):
|
||||
|
@ -1167,134 +1142,134 @@ class SaleDetailedReport(Report):
|
|||
return report_context
|
||||
|
||||
|
||||
class SalePaymentForm(ModelView):
|
||||
'Sale Payment Form'
|
||||
__name__ = 'sale.payment.form'
|
||||
journal = fields.Many2One('account.statement.journal', 'Statement Journal',
|
||||
domain=[
|
||||
('id', 'in', Eval('journals', [])),
|
||||
], depends=['journals'], required=True)
|
||||
journals = fields.One2Many('account.statement.journal', None,
|
||||
'Allowed Statement Journals')
|
||||
payment_amount = fields.Numeric('Payment amount', required=True,
|
||||
digits=(16, Eval('currency_digits', 2)),
|
||||
depends=['currency_digits'])
|
||||
currency_digits = fields.Integer('Currency Digits')
|
||||
party = fields.Many2One('party.party', 'Party', readonly=True)
|
||||
require_voucher = fields.Boolean('Require Voucher',
|
||||
depends=['journal'])
|
||||
voucher = fields.Char('Voucher Number', states={
|
||||
'required': Eval('require_voucher', False),
|
||||
'invisible': Not(Eval('require_voucher', False)),
|
||||
}, depends=['require_voucher'])
|
||||
self_pick_up = fields.Boolean('Self Pick Up', readonly=True)
|
||||
do_invoice = fields.Boolean('Do Invoice')
|
||||
|
||||
@fields.depends('journal', 'voucher')
|
||||
def on_change_with_require_voucher(self):
|
||||
if self.journal:
|
||||
return self.journal.require_voucher
|
||||
else:
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def default_require_voucher(cls):
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def default_do_invoice(cls):
|
||||
return True
|
||||
|
||||
|
||||
class WizardSalePayment(Wizard):
|
||||
'Wizard Sale Payment'
|
||||
__name__ = 'sale.payment'
|
||||
start = StateView('sale.payment.form',
|
||||
'sale_pos.sale_payment_view_form', [
|
||||
Button('Cancel', 'end', 'tryton-cancel'),
|
||||
Button('Pay', 'pay_', 'tryton-ok', default=True),
|
||||
])
|
||||
pay_ = StateTransition()
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(WizardSalePayment, cls).__setup__()
|
||||
|
||||
def default_start(self, fields):
|
||||
pool = Pool()
|
||||
Sale = pool.get('sale.sale')
|
||||
User = pool.get('res.user')
|
||||
sale = Sale(Transaction().context['active_id'])
|
||||
user = User(Transaction().user)
|
||||
sale_device = sale.sale_device or user.sale_device or False
|
||||
if user.id != 0 and not sale_device:
|
||||
raise SaleDeviceError(gettext('sale_pos.msg_not_sale_device'))
|
||||
return {
|
||||
'journal': sale_device.journal.id
|
||||
if sale_device.journal else None,
|
||||
'journals': [j.id for j in sale_device.journals],
|
||||
'payment_amount': abs(sale.total_amount - sale.paid_amount
|
||||
if sale.paid_amount else sale.total_amount),
|
||||
'currency_digits': sale.currency_digits,
|
||||
'party': sale.party.id,
|
||||
}
|
||||
|
||||
def transition_pay_(self):
|
||||
pool = Pool()
|
||||
User = pool.get('res.user')
|
||||
user = User(Transaction().user)
|
||||
Sale = pool.get('sale.sale')
|
||||
Statement = pool.get('account.statement')
|
||||
StatementLine = pool.get('account.statement.line')
|
||||
active_id = Transaction().context.get('active_id', False)
|
||||
sale = Sale(active_id)
|
||||
|
||||
form = self.start
|
||||
if form.payment_amount > 0:
|
||||
device_id = user.sale_device.id if user.sale_device else sale.sale_device.id
|
||||
statements = Statement.search([
|
||||
('journal', '=', form.journal.id),
|
||||
('state', '=', 'draft'),
|
||||
('sale_device', '=', device_id),
|
||||
], order=[('date', 'DESC')])
|
||||
if not statements:
|
||||
raise DraftStatementError(
|
||||
gettext('sale_pos.msg_not_draft_statement', journal=form.journal.name))
|
||||
|
||||
if not sale.number:
|
||||
Sale.set_number([sale])
|
||||
|
||||
if not sale.party.account_receivable:
|
||||
raise PartyMissingAccount(
|
||||
gettext('sale_pos.msg_party_without_account_receivable', s=sale.party.name))
|
||||
account = sale.party.account_receivable.id
|
||||
|
||||
if form.payment_amount:
|
||||
amount = form.payment_amount
|
||||
if sale.total_amount < 0:
|
||||
amount = amount * -1
|
||||
payment = StatementLine(
|
||||
statement=statements[0].id,
|
||||
date=date.today(),
|
||||
amount=amount,
|
||||
party=sale.party.id,
|
||||
account=account,
|
||||
description=self.start.voucher,
|
||||
sale=active_id,
|
||||
# number=self.start.voucher,
|
||||
# voucher=self.start.voucher,
|
||||
)
|
||||
payment.save()
|
||||
|
||||
if sale.total_amount != sale.paid_amount:
|
||||
return 'start'
|
||||
sale.save()
|
||||
if self.start.do_invoice:
|
||||
# for inv in sale.invoices:
|
||||
# if inv.state == 'posted':
|
||||
# inv.write([inv], {'state': 'draft'})
|
||||
Sale.workflow_to_end([sale])
|
||||
return 'end'
|
||||
# class SalePaymentForm(ModelView):
|
||||
# 'Sale Payment Form'
|
||||
# __name__ = 'sale.payment.form'
|
||||
# journal = fields.Many2One('account.statement.journal', 'Statement Journal',
|
||||
# domain=[
|
||||
# ('id', 'in', Eval('journals', [])),
|
||||
# ], depends=['journals'], required=True)
|
||||
# journals = fields.One2Many('account.statement.journal', None,
|
||||
# 'Allowed Statement Journals')
|
||||
# payment_amount = fields.Numeric('Payment amount', required=True,
|
||||
# digits=(16, Eval('currency_digits', 2)),
|
||||
# depends=['currency_digits'])
|
||||
# currency_digits = fields.Integer('Currency Digits')
|
||||
# party = fields.Many2One('party.party', 'Party', readonly=True)
|
||||
# require_voucher = fields.Boolean('Require Voucher',
|
||||
# depends=['journal'])
|
||||
# voucher = fields.Char('Voucher Number', states={
|
||||
# 'required': Eval('require_voucher', False),
|
||||
# 'invisible': Not(Eval('require_voucher', False)),
|
||||
# }, depends=['require_voucher'])
|
||||
# self_pick_up = fields.Boolean('Self Pick Up', readonly=True)
|
||||
# do_invoice = fields.Boolean('Do Invoice')
|
||||
#
|
||||
# @fields.depends('journal', 'voucher')
|
||||
# def on_change_with_require_voucher(self):
|
||||
# if self.journal:
|
||||
# return self.journal.require_voucher
|
||||
# else:
|
||||
# return False
|
||||
#
|
||||
# @classmethod
|
||||
# def default_require_voucher(cls):
|
||||
# return False
|
||||
#
|
||||
# @classmethod
|
||||
# def default_do_invoice(cls):
|
||||
# return True
|
||||
#
|
||||
#
|
||||
# class WizardSalePayment(Wizard):
|
||||
# 'Wizard Sale Payment'
|
||||
# __name__ = 'sale.payment'
|
||||
# start = StateView('sale.payment.form',
|
||||
# 'sale_pos.sale_payment_view_form', [
|
||||
# Button('Cancel', 'end', 'tryton-cancel'),
|
||||
# Button('Pay', 'pay_', 'tryton-ok', default=True),
|
||||
# ])
|
||||
# pay_ = StateTransition()
|
||||
#
|
||||
# @classmethod
|
||||
# def __setup__(cls):
|
||||
# super(WizardSalePayment, cls).__setup__()
|
||||
#
|
||||
# def default_start(self, fields):
|
||||
# pool = Pool()
|
||||
# Sale = pool.get('sale.sale')
|
||||
# User = pool.get('res.user')
|
||||
# sale = Sale(Transaction().context['active_id'])
|
||||
# user = User(Transaction().user)
|
||||
# sale_device = sale.sale_device or user.sale_device or False
|
||||
# if user.id != 0 and not sale_device:
|
||||
# raise SaleDeviceError(gettext('sale_pos.msg_not_sale_device'))
|
||||
# return {
|
||||
# 'journal': sale_device.journal.id
|
||||
# if sale_device.journal else None,
|
||||
# 'journals': [j.id for j in sale_device.journals],
|
||||
# 'payment_amount': abs(sale.total_amount - sale.paid_amount
|
||||
# if sale.paid_amount else sale.total_amount),
|
||||
# 'currency_digits': sale.currency_digits,
|
||||
# 'party': sale.party.id,
|
||||
# }
|
||||
#
|
||||
# def transition_pay_(self):
|
||||
# pool = Pool()
|
||||
# User = pool.get('res.user')
|
||||
# user = User(Transaction().user)
|
||||
# Sale = pool.get('sale.sale')
|
||||
# Statement = pool.get('account.statement')
|
||||
# StatementLine = pool.get('account.statement.line')
|
||||
# active_id = Transaction().context.get('active_id', False)
|
||||
# sale = Sale(active_id)
|
||||
#
|
||||
# form = self.start
|
||||
# if form.payment_amount > 0:
|
||||
# device_id = user.sale_device.id if user.sale_device else sale.sale_device.id
|
||||
# statements = Statement.search([
|
||||
# ('journal', '=', form.journal.id),
|
||||
# ('state', '=', 'draft'),
|
||||
# ('sale_device', '=', device_id),
|
||||
# ], order=[('date', 'DESC')])
|
||||
# if not statements:
|
||||
# raise DraftStatementError(
|
||||
# gettext('sale_pos.msg_not_draft_statement', journal=form.journal.name))
|
||||
#
|
||||
# if not sale.number:
|
||||
# Sale.set_number([sale])
|
||||
#
|
||||
# if not sale.party.account_receivable:
|
||||
# raise PartyMissingAccount(
|
||||
# gettext('sale_pos.msg_party_without_account_receivable', s=sale.party.name))
|
||||
# account = sale.party.account_receivable.id
|
||||
#
|
||||
# if form.payment_amount:
|
||||
# amount = form.payment_amount
|
||||
# if sale.total_amount < 0:
|
||||
# amount = amount * -1
|
||||
# payment = StatementLine(
|
||||
# statement=statements[0].id,
|
||||
# date=date.today(),
|
||||
# amount=amount,
|
||||
# party=sale.party.id,
|
||||
# account=account,
|
||||
# description=self.start.voucher,
|
||||
# sale=active_id,
|
||||
# # number=self.start.voucher,
|
||||
# # voucher=self.start.voucher,
|
||||
# )
|
||||
# payment.save()
|
||||
#
|
||||
# if sale.total_amount != sale.paid_amount:
|
||||
# return 'start'
|
||||
# sale.save()
|
||||
# if self.start.do_invoice:
|
||||
# # for inv in sale.invoices:
|
||||
# # if inv.state == 'posted':
|
||||
# # inv.write([inv], {'state': 'draft'})
|
||||
# Sale.workflow_to_end([sale])
|
||||
# return 'end'
|
||||
|
||||
|
||||
class SaleIncomeDailyStart(ModelView):
|
||||
|
|
Loading…
Reference in a new issue