From dd0bb097e3c10103dee667fe4bf25ccae75e3899 Mon Sep 17 00:00:00 2001 From: oscar Date: Thu, 8 Apr 2021 09:20:38 -0500 Subject: [PATCH] Add get line --- sale.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/sale.py b/sale.py index 5bd37be..bd547f8 100644 --- a/sale.py +++ b/sale.py @@ -1,6 +1,8 @@ # This file is part of purchase_discount module for Tryton. # The COPYRIGHT file at the top level of this repository contains # the full copyright notices and license terms. +import math +from decimal import Decimal from sql import Table from sql.aggregate import Sum from datetime import date @@ -23,6 +25,7 @@ class Sale(metaclass=PoolMeta): Product = Pool().get('product.product') shop_id = ctx['shop'] shop = Shop(shop_id) + today = date.today() for v in args['lines']: del v['id'] del v['amount'] @@ -30,19 +33,23 @@ class Sale(metaclass=PoolMeta): product = Product(v['product']) v['unit'] = product.template.default_uom.id + price_list = args.get('price_list', None) + if price_list: + price_list = price_list['id'] to_create = { 'shop': shop_id, 'invoice_type': 'P', 'company': shop.company.id, 'party': args['party']['id'], - 'sale_date': args['sale_date'], + 'sale_date': today, + 'shipment_date': args['shipment_date'], 'shipment_address': args['shipment_address']['id'], 'invoice_address': args['shipment_address']['id'], 'agent': args['agent']['id'], - 'price_list': args.get('price_list'), + 'price_list': price_list, 'payment_term': shop.payment_term.id, 'state': 'draft', - 'comment': args.get('comment', ''), + 'description': args.get('comment', ''), 'lines': [('create', args['lines'])], } sale, = cls.create([to_create]) @@ -56,6 +63,59 @@ class Sale(metaclass=PoolMeta): } return res + @classmethod + def dash_get_line(cls, args, ctx): + if not args.get('product'): + return {} + + Product = Pool().get('product.product') + PriceListLine = Pool().get('product.price_list.line') + product_id = args['product']['id'] + product = Product(product_id) + + with Transaction().set_context(ctx): + unit_price = product.list_price + + if args.get('quantity'): + quantity = int(args.get('quantity')) + else: + quantity = 1 + + if ctx.get('price_list'): + price_list_id = ctx.get('price_list')['id'] + else: + price_list_id = None + + percent_commission = 0 + if price_list_id: + price_lines = PriceListLine.search([ + ('price_list', '=', price_list_id), + ('product', '=', product_id), + ]) + if price_lines: + price_line = price_lines[0] + unit_price = float(unit_price) + unit_price = Decimal(eval(price_line.formula)) + percent_commission = price_line.price_list.percent_commission + + #ADD TAXES + taxes_ids = [t.id for t in product.customer_taxes_used] + # res = cls.get_price_with_tax([line], ['amount_w_tax', 'unit_price_w_tax']) + print('prueba.........') + res = { + # 'unit_price_w_tax': math.ceil(res['unit_price_w_tax'][None]), + # 'amount_w_tax': math.ceil(res['amount_w_tax'][None]), + # 'taxes': [[('add'), taxes_ids]], + 'unit_price': math.ceil(unit_price), + 'unit': product.template.default_uom.id, + 'type': 'line', + } + if percent_commission: + res['commission_amount'] = round( + (unit_price * quantity * percent_commission), 0 + ) + return res + @classmethod def report_sales_day(cls, args, ctx): pass