fix: Update 7.6
This commit is contained in:
		
							
								
								
									
										43
									
								
								sale.py
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								sale.py
									
									
									
									
									
								
							| @@ -2,6 +2,7 @@ | ||||
| # The COPYRIGHT file at the top level of this repository contains the full | ||||
| # copyright notices and license terms. | ||||
| from decimal import Decimal | ||||
| from sql import For, Literal | ||||
| from sql.operators import And | ||||
| from sql.aggregate import Sum | ||||
| from sql.conditionals import Coalesce | ||||
| @@ -84,6 +85,16 @@ class Sale(metaclass=PoolMeta): | ||||
|             Invoice.write(*invoices) | ||||
|             return list(to_post) | ||||
|  | ||||
|     @classmethod | ||||
|     @ModelView.button | ||||
|     def process(cls, sales): | ||||
|         states = {'confirmed', 'processing', 'done'} | ||||
|         sales = [s for s in sales if s.state in states] | ||||
|         cls._process_invoice(sales) | ||||
|         cls._process_shipment(sales) | ||||
|         cls._process_invoice_shipment_states(sales) | ||||
|         cls._process_state(sales) | ||||
|  | ||||
|     @classmethod | ||||
|     def workflow_to_end(cls, sales): | ||||
|         pool = Pool() | ||||
| @@ -99,13 +110,16 @@ class Sale(metaclass=PoolMeta): | ||||
|                 cls.process([sale]) | ||||
|  | ||||
|             if not sale.invoices and sale.invoice_method == 'order': | ||||
|                 raise UserError(gettext( | ||||
|                     'sale_payment.not_customer_invoice', | ||||
|                     reference=sale.reference)) | ||||
|                 raise UserError( | ||||
|                     gettext( | ||||
|                         'sale_payment.not_customer_invoice', | ||||
|                         reference=sale.reference | ||||
|                     )) | ||||
|  | ||||
|         to_post = cls.set_invoices_to_be_posted(sales) | ||||
|         if to_post: | ||||
|             Invoice.post(to_post) | ||||
|             with Transaction().set_context(_skip_warnings=True): | ||||
|                 Invoice.post(to_post) | ||||
|  | ||||
|         to_save = [] | ||||
|         to_do = [] | ||||
| @@ -339,10 +353,23 @@ class WizardSalePayment(Wizard): | ||||
|                 ) | ||||
|  | ||||
|     def transition_pay_(self): | ||||
|         Sale = Pool().get('sale.sale') | ||||
|         pool = Pool() | ||||
|         Sale = pool.get('sale.sale') | ||||
|         sale = Sale(Transaction().context['active_id']) | ||||
|         transaction = Transaction() | ||||
|         database = transaction.database | ||||
|         connection = transaction.connection | ||||
|  | ||||
|         active_id = Transaction().context.get('active_id', False) | ||||
|         sale = Sale(active_id) | ||||
|         if database.has_select_for(): | ||||
|             table = Sale.__table__() | ||||
|             query = table.select( | ||||
|                 Literal(1), | ||||
|                 where=(table.id == sale.id), | ||||
|                 for_=For('UPDATE', nowait=True)) | ||||
|             with connection.cursor() as cursor: | ||||
|                 cursor.execute(*query) | ||||
|         else: | ||||
|             Sale.lock() | ||||
|  | ||||
|         line = self.get_statement_line(sale) | ||||
|         if line: | ||||
| @@ -350,7 +377,7 @@ class WizardSalePayment(Wizard): | ||||
|  | ||||
|         if sale.total_amount != sale.paid_amount: | ||||
|             return 'start' | ||||
|         if sale.state != 'draft': | ||||
|         if sale.state not in ('draft', 'quotation', 'confirmed'): | ||||
|             return 'end' | ||||
|  | ||||
|         sale.description = sale.reference | ||||
|   | ||||
| @@ -408,8 +408,8 @@ class StatementLine(ModelView): | ||||
|         if company: | ||||
|             return Company(company).currency.id | ||||
|  | ||||
|  | ||||
|     @fields.depends('end_balance', 'real_cash', 'mismatch') | ||||
|     @fields.depends( | ||||
|         'end_balance', 'real_cash', 'mismatch') | ||||
|     def on_change_real_cash(self): | ||||
|         if self.real_cash and self.end_balance: | ||||
|             self.mismatch = self.real_cash - self.end_balance | ||||
|   | ||||
		Reference in New Issue
	
	Block a user