[ADD]:Added Upstream Patch for point_of_sale
This commit is contained in:
parent
00ea1bb90f
commit
c8ce027ecb
@ -318,10 +318,11 @@ class PosConfig(models.Model):
|
|||||||
def name_get(self):
|
def name_get(self):
|
||||||
result = []
|
result = []
|
||||||
for config in self:
|
for config in self:
|
||||||
if (not config.session_ids) or (config.session_ids[0].state == 'closed'):
|
last_session = self.env['pos.session'].search([('config_id', '=', config.id)], limit=1)
|
||||||
|
if (not last_session) or (last_session.state == 'closed'):
|
||||||
result.append((config.id, config.name + ' (' + _('not used') + ')'))
|
result.append((config.id, config.name + ' (' + _('not used') + ')'))
|
||||||
continue
|
continue
|
||||||
result.append((config.id, config.name + ' (' + config.session_ids[0].user_id.name + ')'))
|
result.append((config.id, config.name + ' (' + last_session.user_id.name + ')'))
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
@ -350,11 +351,12 @@ class PosConfig(models.Model):
|
|||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def write(self, vals):
|
def write(self, vals):
|
||||||
if (self.is_posbox or vals.get('is_posbox')) and (self.iface_customer_facing_display or vals.get('iface_customer_facing_display')):
|
|
||||||
facing_display = (self.customer_facing_display_html or vals.get('customer_facing_display_html') or '').strip()
|
|
||||||
if not facing_display:
|
|
||||||
vals['customer_facing_display_html'] = self._compute_default_customer_html()
|
|
||||||
result = super(PosConfig, self).write(vals)
|
result = super(PosConfig, self).write(vals)
|
||||||
|
|
||||||
|
config_display = self.filtered(lambda c: c.is_posbox and c.iface_customer_facing_display and not (c.customer_facing_display_html or '').strip())
|
||||||
|
if config_display:
|
||||||
|
super(PosConfig, config_display).write({'customer_facing_display_html': self._compute_default_customer_html()})
|
||||||
|
|
||||||
self.sudo()._set_fiscal_position()
|
self.sudo()._set_fiscal_position()
|
||||||
self.sudo()._check_modules_to_install()
|
self.sudo()._check_modules_to_install()
|
||||||
self.sudo()._check_groups_implied()
|
self.sudo()._check_groups_implied()
|
||||||
|
@ -46,9 +46,11 @@ class PosOrder(models.Model):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def _payment_fields(self, ui_paymentline):
|
def _payment_fields(self, ui_paymentline):
|
||||||
|
payment_date = ui_paymentline['name']
|
||||||
|
payment_date = fields.Date.context_today(self, fields.Datetime.from_string(payment_date))
|
||||||
return {
|
return {
|
||||||
'amount': ui_paymentline['amount'] or 0.0,
|
'amount': ui_paymentline['amount'] or 0.0,
|
||||||
'payment_date': ui_paymentline['name'],
|
'payment_date': payment_date,
|
||||||
'statement_id': ui_paymentline['statement_id'],
|
'statement_id': ui_paymentline['statement_id'],
|
||||||
'payment_name': ui_paymentline.get('note', False),
|
'payment_name': ui_paymentline.get('note', False),
|
||||||
'journal': ui_paymentline['journal_id'],
|
'journal': ui_paymentline['journal_id'],
|
||||||
@ -173,7 +175,7 @@ class PosOrder(models.Model):
|
|||||||
'comment': self.note or '',
|
'comment': self.note or '',
|
||||||
# considering partner's sale pricelist's currency
|
# considering partner's sale pricelist's currency
|
||||||
'currency_id': self.pricelist_id.currency_id.id,
|
'currency_id': self.pricelist_id.currency_id.id,
|
||||||
'user_id': self.env.uid,
|
'user_id': self.user_id.id,
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
@ -258,7 +260,7 @@ class PosOrder(models.Model):
|
|||||||
line = grouped_data[product_key][0]
|
line = grouped_data[product_key][0]
|
||||||
product = Product.browse(line['product_id'])
|
product = Product.browse(line['product_id'])
|
||||||
# In the SO part, the entries will be inverted by function compute_invoice_totals
|
# In the SO part, the entries will be inverted by function compute_invoice_totals
|
||||||
price_unit = - product._get_anglo_saxon_price_unit()
|
price_unit = self._get_pos_anglo_saxon_price_unit(product, line['partner_id'], line['quantity'])
|
||||||
account_analytic = Analytic.browse(line.get('analytic_account_id'))
|
account_analytic = Analytic.browse(line.get('analytic_account_id'))
|
||||||
res = Product._anglo_saxon_sale_move_lines(
|
res = Product._anglo_saxon_sale_move_lines(
|
||||||
line['name'], product, product.uom_id, line['quantity'], price_unit,
|
line['name'], product, product.uom_id, line['quantity'], price_unit,
|
||||||
@ -412,6 +414,18 @@ class PosOrder(models.Model):
|
|||||||
move.sudo().post()
|
move.sudo().post()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def _get_pos_anglo_saxon_price_unit(self, product, partner_id, quantity):
|
||||||
|
price_unit = product._get_anglo_saxon_price_unit()
|
||||||
|
if product._get_invoice_policy() == "delivery":
|
||||||
|
moves = self.filtered(lambda o: o.partner_id.id == partner_id)\
|
||||||
|
.mapped('picking_id.move_lines')\
|
||||||
|
.filtered(lambda m: m.product_id.id == product.id)\
|
||||||
|
.sorted(lambda x: x.date)
|
||||||
|
average_price_unit = product._compute_average_price(0, quantity, moves)
|
||||||
|
price_unit = average_price_unit or price_unit
|
||||||
|
# In the SO part, the entries will be inverted by function compute_invoice_totals
|
||||||
|
return - price_unit
|
||||||
|
|
||||||
def _reconcile_payments(self):
|
def _reconcile_payments(self):
|
||||||
for order in self:
|
for order in self:
|
||||||
aml = order.statement_ids.mapped('journal_entry_ids') | order.account_move.line_ids | order.invoice_id.move_id.line_ids
|
aml = order.statement_ids.mapped('journal_entry_ids') | order.account_move.line_ids | order.invoice_id.move_id.line_ids
|
||||||
@ -801,7 +815,7 @@ class PosOrder(models.Model):
|
|||||||
"""Create a new payment for the order"""
|
"""Create a new payment for the order"""
|
||||||
args = {
|
args = {
|
||||||
'amount': data['amount'],
|
'amount': data['amount'],
|
||||||
'date': data.get('payment_date', fields.Date.today()),
|
'date': data.get('payment_date', fields.Date.context_today(self)),
|
||||||
'name': self.name + ': ' + (data.get('payment_name', '') or ''),
|
'name': self.name + ': ' + (data.get('payment_name', '') or ''),
|
||||||
'partner_id': self.env["res.partner"]._find_accounting_partner(self.partner_id).id or False,
|
'partner_id': self.env["res.partner"]._find_accounting_partner(self.partner_id).id or False,
|
||||||
}
|
}
|
||||||
|
@ -38,8 +38,8 @@ class PosSession(models.Model):
|
|||||||
paid=order.amount_paid,
|
paid=order.amount_paid,
|
||||||
))
|
))
|
||||||
order.action_pos_order_done()
|
order.action_pos_order_done()
|
||||||
orders = session.order_ids.filtered(lambda order: order.state in ['invoiced', 'done'])
|
orders_to_reconcile = session.order_ids.filtered(lambda order: order.state in ['invoiced', 'done'] and order.partner_id)
|
||||||
orders.sudo()._reconcile_payments()
|
orders_to_reconcile.sudo()._reconcile_payments()
|
||||||
|
|
||||||
config_id = fields.Many2one(
|
config_id = fields.Many2one(
|
||||||
'pos.config', string='Point of Sale',
|
'pos.config', string='Point of Sale',
|
||||||
|
@ -21,6 +21,23 @@ class ProductTemplate(models.Model):
|
|||||||
raise UserError(_('You cannot delete a product saleable in point of sale while a session is still opened.'))
|
raise UserError(_('You cannot delete a product saleable in point of sale while a session is still opened.'))
|
||||||
return super(ProductTemplate, self).unlink()
|
return super(ProductTemplate, self).unlink()
|
||||||
|
|
||||||
|
@api.onchange('sale_ok')
|
||||||
|
def _onchange_sale_ok(self):
|
||||||
|
if not self.sale_ok:
|
||||||
|
self.available_in_pos = False
|
||||||
|
|
||||||
|
|
||||||
|
class ProductProduct(models.Model):
|
||||||
|
_inherit = 'product.product'
|
||||||
|
|
||||||
|
@api.multi
|
||||||
|
def unlink(self):
|
||||||
|
product_ctx = dict(self.env.context or {}, active_test=False)
|
||||||
|
if self.env['pos.session'].search_count([('state', '!=', 'closed')]):
|
||||||
|
if self.with_context(product_ctx).search_count([('id', 'in', self.ids), ('product_tmpl_id.available_in_pos', '=', True)]):
|
||||||
|
raise UserError(_('You cannot delete a product saleable in point of sale while a session is still opened.'))
|
||||||
|
return super(ProductProduct, self).unlink()
|
||||||
|
|
||||||
|
|
||||||
class ProductUomCateg(models.Model):
|
class ProductUomCateg(models.Model):
|
||||||
_inherit = 'product.uom.categ'
|
_inherit = 'product.uom.categ'
|
||||||
|
@ -134,7 +134,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
<div t-if="widget.editable" class="o_kanban_card_manage_settings row" groups="point_of_sale.group_pos_manager">
|
||||||
<div class="col-xs-12 text-right">
|
<div class="col-xs-12 text-right">
|
||||||
<a type="edit">Settings</a>
|
<a type="edit">Settings</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -22,7 +22,8 @@
|
|||||||
</tr></thead>
|
</tr></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr t-foreach='products' t-as='line'>
|
<tr t-foreach='products' t-as='line'>
|
||||||
<td><t t-esc="line['product_name']" /></td>
|
<t t-set="internal_reference" t-value="line['code'] and '[%s] ' % line['code'] or ''" />
|
||||||
|
<td><t t-esc="internal_reference" /><t t-esc="line['product_name']" /></td>
|
||||||
<td>
|
<td>
|
||||||
<t t-esc="line['quantity']" />
|
<t t-esc="line['quantity']" />
|
||||||
<t t-if='line["uom"] != "Unit(s)"'>
|
<t t-if='line["uom"] != "Unit(s)"'>
|
||||||
|
Loading…
Reference in New Issue
Block a user