|
@@ -10,37 +10,63 @@ class sale_order(models.Model):
|
|
|
@api.one
|
|
|
def action_wait(self):
|
|
|
self.check_limit()
|
|
|
- # self.check_morosidad()
|
|
|
return super(sale_order, self).action_wait()
|
|
|
|
|
|
@api.one
|
|
|
def check_limit(self):
|
|
|
|
|
|
- if self.contado == True:
|
|
|
- return True
|
|
|
-
|
|
|
- available_credit = self.partner_id.credit_limit - self.partner_id.credit
|
|
|
-
|
|
|
- if self.amount_total > available_credit:
|
|
|
- if not self.user_has_groups('partner_credito_limite.groups_partner_credito_limite'):
|
|
|
- msg = 'No se puede confirmar el Pedido ya que el cliente no tiene crédito suficiente.\
|
|
|
- Pruebe marcar la opción "Contado"'
|
|
|
- raise Warning(_(msg))
|
|
|
- return False
|
|
|
- return True
|
|
|
-
|
|
|
- #@api.one
|
|
|
- #def check_morosidad(self):
|
|
|
- # now = datetime.now()
|
|
|
- # hoy = datetime.strptime(now.strftime("%Y-%m-%d"),"%Y-%m-%d")
|
|
|
- # domain = [('id', '=', self.partner_id.id)]
|
|
|
- # partner = self.env['res.partner'].search(domain)
|
|
|
- # invoices = self.env['account.invoice'].search([('partner_id', '=',self.partner_id.id),('state', '=','open'),('type', '=', 'out_invoice'),('journal_id.type','=','sale')])
|
|
|
- # for item in invoices:
|
|
|
- # moveLine = self.env['account.move.line'].search([('move_id','=', item.move_id.id),('debit','>',0)])
|
|
|
- # if moveLine.date_maturity < now.strftime("%Y-%m-%d"):
|
|
|
- # vencimiento = datetime.strptime(moveLine.date_maturity,"%Y-%m-%d")
|
|
|
- # if partner.morosidad > 0 and (hoy-vencimiento).days > partner.morosidad:
|
|
|
- # raise Warning(_("El cliente %s tiene cuotas vencidas con más de %s días de atraso") % (partner.name, partner.morosidad))
|
|
|
- # return False
|
|
|
- # return True
|
|
|
+ if self.order_policy == 'prepaid':
|
|
|
+ return True
|
|
|
+
|
|
|
+ # We sum from all the sale orders that are aproved, the sale order
|
|
|
+ # lines that are not yet invoiced
|
|
|
+ domain = [('order_id.partner_id', '=', self.partner_id.id),
|
|
|
+ ('invoiced', '=', False),
|
|
|
+ ('order_id.state', 'not in', ['draft', 'cancel', 'sent'])]
|
|
|
+ order_lines = self.env['sale.order.line'].search(domain)
|
|
|
+ none_invoiced_amount = sum([x.price_subtotal for x in order_lines])
|
|
|
+
|
|
|
+ # We sum from all the invoices that are in draft the total amount
|
|
|
+ domain = [
|
|
|
+ ('partner_id', '=', self.partner_id.id), ('state', '=', 'draft')]
|
|
|
+ draft_invoices = self.env['account.invoice'].search(domain)
|
|
|
+ draft_invoices_amount = sum([x.amount_total for x in draft_invoices])
|
|
|
+
|
|
|
+ available_credit = self.partner_id.credit_limit - \
|
|
|
+ self.partner_id.credit - \
|
|
|
+ none_invoiced_amount - draft_invoices_amount
|
|
|
+
|
|
|
+ if self.amount_total > available_credit:
|
|
|
+ msg = _('No se puede confirmar el Pedido ya que el cliente no tiene credito suficiente.\
|
|
|
+ Cambia el límite de cliente en su ficha e intente de nuevo"')
|
|
|
+ raise Warning(msg)
|
|
|
+ return False
|
|
|
+ return True
|
|
|
+
|
|
|
+
|
|
|
+# class sale_order(models.Model):
|
|
|
+# _inherit = "sale.order"
|
|
|
+#
|
|
|
+# @api.one
|
|
|
+# def action_wait(self):
|
|
|
+# self.check_limit()
|
|
|
+# # self.check_morosidad()
|
|
|
+# return super(sale_order, self).action_wait()
|
|
|
+#
|
|
|
+# @api.one
|
|
|
+# def check_limit(self):
|
|
|
+#
|
|
|
+# if self.contado == True:
|
|
|
+# return True
|
|
|
+#
|
|
|
+# available_credit = self.partner_id.credit_limit - self.partner_id.credit
|
|
|
+#
|
|
|
+# if self.amount_total > available_credit:
|
|
|
+# if not self.user_has_groups('partner_credito_limite.credit_config'):
|
|
|
+# msg = 'No se puede confirmar el Pedido ya que el cliente no tiene crédito suficiente.\
|
|
|
+# Pruebe marcar la opción "Contado"'
|
|
|
+# raise Warning(_(msg))
|
|
|
+# return False
|
|
|
+# return True
|
|
|
+#
|
|
|
+#
|