From f4f150ec2492b048886e1965a0a650864295c76c Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 15 May 2023 16:22:21 +0700 Subject: grand total field, compute grand total, sale order print for website, fix sale order download pdf api --- indoteknik_api/controllers/api_v1/sale_order.py | 10 +- indoteknik_api/models/sale_order.py | 3 +- indoteknik_custom/__manifest__.py | 3 +- indoteknik_custom/models/sale_order.py | 5 + indoteknik_custom/report/report_sale_order.xml | 273 ++++++++++++++++++++++++ indoteknik_custom/views/sale_order.xml | 1 + 6 files changed, 290 insertions(+), 5 deletions(-) create mode 100644 indoteknik_custom/report/report_sale_order.xml diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index ec39b32a..8fe1bb52 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -187,7 +187,7 @@ class SaleOrder(controller.Controller): return self.response('Unauthorized') sale_order = request.env['sale.order'].sudo().search_read([('id', '=', id)], ['name']) - pdf, type = request.env['ir.actions.report'].sudo().search([('report_name', '=', 'sale.report_saleorder')])._render_qweb_pdf([id]) + pdf, type = request.env['ir.actions.report'].sudo().search([('report_name', '=', 'indoteknik_custom.report_saleorder_website')])._render_qweb_pdf([id]) if pdf and len(sale_order) > 0: return rest_api.response_attachment({ 'content': pdf, @@ -235,7 +235,9 @@ class SaleOrder(controller.Controller): 'po_number': [], 'po_file': [], 'type': [], - 'delivery_amount': ['number', 'default:0'] + 'delivery_amount': ['number', 'default:0'], + 'carrier_id': [], + 'delivery_service_type': [] }) if not params['valid']: @@ -260,7 +262,9 @@ class SaleOrder(controller.Controller): 'partner_purchase_order_file': params['value']['po_file'], 'delivery_amt': params['value']['delivery_amount'], 'shipping_cost_covered': 'customer', - 'shipping_paid_by': 'customer' + 'shipping_paid_by': 'customer', + 'carrier_id': params['value']['carrier_id'], + 'delivery_service_type': params['value']['delivery_service_type'], } if params['value']['type'] == 'sale_order': parameters['approval_status'] = 'pengajuan1' diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py index cadf9f77..9661a0ba 100644 --- a/indoteknik_api/models/sale_order.py +++ b/indoteknik_api/models/sale_order.py @@ -12,7 +12,7 @@ class SaleOrder(models.Model): 'sales': sale_order.user_id.name, 'amount_untaxed': sale_order.amount_untaxed, 'amount_tax': sale_order.amount_tax, - 'amount_total': sale_order.amount_total, + 'amount_total': sale_order.grand_total, 'purchase_order_name': sale_order.partner_purchase_order_name or sale_order.client_order_ref, 'purchase_order_file': True if sale_order.partner_purchase_order_file else False, 'invoice_count': sale_order.invoice_count, @@ -49,6 +49,7 @@ class SaleOrder(models.Model): data_with_detail = { 'payment_term': sale_order.payment_term_id.name or '', 'products': [], + 'delivery_amount': sale_order.delivery_amt or 0, 'address': { 'customer': res_users.api_address_response(sale_order.partner_id), 'invoice': res_users.api_address_response(sale_order.partner_invoice_id), diff --git a/indoteknik_custom/__manifest__.py b/indoteknik_custom/__manifest__.py index d9e98975..c52e27b7 100755 --- a/indoteknik_custom/__manifest__.py +++ b/indoteknik_custom/__manifest__.py @@ -79,7 +79,8 @@ 'report/report_banner_banner2.xml', 'report/purchase_order.xml', 'report/report_invoice.xml', - 'report/report_picking.xml' + 'report/report_picking.xml', + 'report/report_sale_order.xml', ], 'demo': [], 'css': [], diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 69e96968..14c87641 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -73,6 +73,7 @@ class SaleOrder(models.Model): gross_amount = fields.Float(string='Gross Amount', help='Jumlah pembayaran yang dilakukan dengan Midtrans') notification = fields.Char(string='Notification', help='Dapat membantu error dari approval') delivery_service_type = fields.Char(string='Delivery Service Type', help='data dari rajaongkir') + grand_total = fields.Monetary(string='Grand Total', help='Amount total + amount delivery', compute='_compute_grand_total') @api.model def _generate_so_access_token(self, limit=50): @@ -362,6 +363,10 @@ class SaleOrder(models.Model): for line in self.order_line: line.product_id_change() + def _compute_grand_total(self): + for order in self: + order.grand_total = order.delivery_amt + order.amount_total + class SaleOrderLine(models.Model): _inherit = 'sale.order.line' diff --git a/indoteknik_custom/report/report_sale_order.xml b/indoteknik_custom/report/report_sale_order.xml new file mode 100644 index 00000000..595a989f --- /dev/null +++ b/indoteknik_custom/report/report_sale_order.xml @@ -0,0 +1,273 @@ + + + + + Quotation / Order (Website) + sale.order + qweb-pdf + indoteknik_custom.report_saleorder_website + indoteknik_custom.report_saleorder_website + (object.state in ('draft', 'sent') and 'Quotation - %s' % (object.name)) or 'Order - %s' % (object.name) + + report + + + + + + + + + + + \ No newline at end of file diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index fde93a9b..c66201a9 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -65,6 +65,7 @@ + -- cgit v1.2.3 From 3e7913ef03dc46a902f14d29e00c92eaed6bdf9d Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Wed, 17 May 2023 14:21:27 +0700 Subject: Fix error edit address, delete delivery line sale order api --- indoteknik_api/controllers/api_v1/partner.py | 4 ++-- indoteknik_api/controllers/api_v1/sale_order.py | 12 ------------ indoteknik_api/controllers/controller.py | 4 ++++ 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index fc05ae90..e61c98c1 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -33,7 +33,7 @@ class Partner(controller.Controller): 'street': ['required'], 'city_id': ['required', 'number', 'alias:kota_id'], 'district_id': ['number', 'alias:kecamatan_id'], - 'sub_district_id': ['number', 'alias:kelurahan_id'], + 'sub_district_id': ['number', 'alias:kelurahan_id', 'exclude_if_null'], 'zip': ['required'], }) @@ -62,7 +62,7 @@ class Partner(controller.Controller): 'street': ['required'], 'city_id': ['required', 'number', 'alias:kota_id'], 'district_id': ['number', 'alias:kecamatan_id'], - 'sub_district_id': ['number', 'alias:kelurahan_id'], + 'sub_district_id': ['number', 'alias:kelurahan_id', 'exclude_if_null'], 'zip': ['required'], }) diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 8fe1bb52..2ac92bf9 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -302,18 +302,6 @@ class SaleOrder(controller.Controller): 'price_unit': product._get_website_price_exclude_tax(), 'discount': discount }) - - # Static order line for delivery - if params['value']['type'] == 'sale_order' and params['value']['delivery_amount'] > 0: - parameters.append({ - 'company_id': 1, - 'order_id': sale_order.id, - 'product_id': 81384, - 'product_uom_qty': 1, - 'price_unit': params['value']['delivery_amount'], - 'discount': 0, - 'tax_id': False - }) request.env['sale.order.line'].create(parameters) return self.response({ diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index b850bdde..90bc50ed 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -73,6 +73,7 @@ class Controller(http.Controller): for key, rules in queries.items(): is_number = 'number' in rules + is_exclude_if_null = 'exclude_if_null' in rules alias = next((r.replace('alias:', '') for r in rules if r.startswith('alias:')), key) default = next((r.replace('default:', '') for r in rules if r.startswith('default:')), None) @@ -91,6 +92,9 @@ class Controller(http.Controller): if is_number and value.isdigit(): value = int(value) + if not value and is_exclude_if_null: + continue + result['value'][alias] = value result['valid'] = not result['reason'] -- cgit v1.2.3