|
@@ -201,7 +201,7 @@ class Purchases(http.Controller):
|
|
|
'''
|
|
|
'''
|
|
|
def make_info_log(self, log):
|
|
|
- LOGGER.info('[INFO]' + log)
|
|
|
+ LOGGER.info('\033[1;34m[INFO] --> \033[m{}'.format(log))
|
|
|
|
|
|
'''
|
|
|
New purchase resource route
|
|
@@ -301,21 +301,34 @@ class Purchases(http.Controller):
|
|
|
|
|
|
return pricelist.id
|
|
|
|
|
|
+ '''
|
|
|
+ Get default location
|
|
|
+ '''
|
|
|
+ def get_stock_location_id(self):
|
|
|
+ stock_location = request.env['stock.location'].search([('usage', '=', 'internal')])
|
|
|
+
|
|
|
+ return stock_location.id
|
|
|
+
|
|
|
'''
|
|
|
Create purchase order from cart and return id
|
|
|
'''
|
|
|
- def create_purchase_order(self, supplier_id, cart_items, date_aprove, currency_id, pricelist_id, payment_term_id=None):
|
|
|
+ def create_purchase_order(self, supplier_id, cart_items, date_order, currency_id, pricelist_id, payment_term_id=None):
|
|
|
return request.env['purchase.order'].create({
|
|
|
+ 'name': '/',
|
|
|
'partner_id': supplier_id,
|
|
|
'order_line': [[0, False, {
|
|
|
+ 'name': line.get('name'),
|
|
|
+ 'date_planned': date_order,
|
|
|
'product_id': int(line.get('id')),
|
|
|
- 'product_uom_qty': float(line.get('quantity')),
|
|
|
+ 'product_qty': float(line.get('quantity')),
|
|
|
'price_unit': float(line.get('price'))
|
|
|
}] for line in cart_items],
|
|
|
- 'date_aprove': date_aprove,
|
|
|
+ 'date_order': date_order,
|
|
|
'currency_id': currency_id,
|
|
|
'pricelist_id': pricelist_id,
|
|
|
'payment_term_id': payment_term_id,
|
|
|
+ 'location_id': self.get_stock_location_id(),
|
|
|
+ 'invoice_method': 'manual',
|
|
|
'state': 'draft'
|
|
|
})
|
|
|
|
|
@@ -325,29 +338,56 @@ class Purchases(http.Controller):
|
|
|
def confirm_purchase_order(self, purchase_order_id):
|
|
|
purchase_order = request.env['purchase.order'].browse(purchase_order_id)
|
|
|
purchase_order.write({
|
|
|
- 'state': 'manual'
|
|
|
+ 'state': 'confirmed'
|
|
|
})
|
|
|
|
|
|
- return purchase_order.action_confirm()
|
|
|
+ purchase_order.action_purchase_confirm()
|
|
|
|
|
|
+ for picking in purchase_order.picking_ids:
|
|
|
+ picking.force_assign()
|
|
|
+ picking.action_done()
|
|
|
+
|
|
|
'''
|
|
|
- Create invoice from purchase order
|
|
|
+ Purchase order
|
|
|
'''
|
|
|
- def create_invoice(self, purchase_order_id, currency_id, date_now):
|
|
|
- purchase_order = request.env['purchase.order'].browse(purchase_order_id)
|
|
|
- invoice_id = purchase_order.action_invoice_create()
|
|
|
- invoice = request.env['account.invoice'].browse(invoice_id)
|
|
|
+ def create_invoice(self, purchase_order_id):
|
|
|
+ purchase_order_obj = request.env['purchase.order']
|
|
|
+ purchase_order_line_obj = request.env['purchase.order.line']
|
|
|
+ purchase_order_line_invoice_obj = request.env['purchase.order.line_invoice']
|
|
|
+ account_invoice_line_obj = request.env['account.invoice.line']
|
|
|
|
|
|
- date_due = parse(date_now) + rd(days=max(invoice.payment_term.line_ids.mapped(lambda x: x.days + x.days2)))
|
|
|
+ purchase_order = purchase_order_obj.browse(purchase_order_id)
|
|
|
+ invoice_lines = {}
|
|
|
|
|
|
- invoice.write({
|
|
|
- 'currency_id': currency_id,
|
|
|
- 'date_invoice': date_now,
|
|
|
- 'date_due': date_due.strftime(DATE_FORMAT),
|
|
|
- 'state': 'open'
|
|
|
- })
|
|
|
+ for line in purchase_order.order_line:
|
|
|
+ if (not line.invoiced) and (line.state not in ('draft', 'cancel')):
|
|
|
+ if not line.partner_id.id in invoice_lines:
|
|
|
+ invoice_lines[line.partner_id.id] = []
|
|
|
|
|
|
- return invoice
|
|
|
+ account_id = purchase_order_obj._choose_account_from_po_line(line)
|
|
|
+ account_invoice_line_values = purchase_order_obj._prepare_inv_line(account_id, line)
|
|
|
+ account_invoice_line_values.update({
|
|
|
+ 'origin': line.order_id.name
|
|
|
+ })
|
|
|
+
|
|
|
+ account_invoice_line_id = account_invoice_line_obj.create(account_invoice_line_values)
|
|
|
+
|
|
|
+ purchase_order_line_obj.with_context({
|
|
|
+ 'invoiced': True,
|
|
|
+ 'invoice_lines': [(4, account_invoice_line_id.id)]
|
|
|
+ }).write([line.id])
|
|
|
+
|
|
|
+ invoice_lines[line.partner_id.id].append((line, account_invoice_line_id.id))
|
|
|
+
|
|
|
+ invoice_ids = []
|
|
|
+ for value in invoice_lines.values():
|
|
|
+ invoice_line = map(lambda x : x[1], value)
|
|
|
+ orders = list(set(map(lambda x : x[0].order_id, value)))
|
|
|
+
|
|
|
+ new_id = purchase_order_line_invoice_obj._make_invoice_by_partner(orders[0].partner_id, orders, invoice_line)
|
|
|
+ invoice_ids.append(new_id)
|
|
|
+
|
|
|
+ return invoice_ids
|
|
|
|
|
|
'''
|
|
|
Purchase processing resource route
|
|
@@ -356,7 +396,7 @@ class Purchases(http.Controller):
|
|
|
def process_purchase(self, **kw):
|
|
|
self.make_info_log('Processing purchase...')
|
|
|
|
|
|
- # Get date
|
|
|
+ # # Get date
|
|
|
date_now = datetime.now().strftime(DATE_FORMAT)
|
|
|
self.make_info_log('Getting date')
|
|
|
|
|
@@ -366,10 +406,21 @@ class Purchases(http.Controller):
|
|
|
|
|
|
# Get pricelist
|
|
|
pricelist_id = self.get_pricelist_id(currency_id)
|
|
|
- self.make_info_log('Getting product pricelist')
|
|
|
+ self.make_info_log('Product pricelist checked')
|
|
|
|
|
|
+ # Create purchase order
|
|
|
purchase_order = self.create_purchase_order(kw.get('supplierId'), kw.get('items'), date_now, currency_id, pricelist_id, kw.get('paymentTermId'))
|
|
|
- self.make_info_log('Created purchase order')
|
|
|
+ self.make_info_log('Purchase order created')
|
|
|
+
|
|
|
+ # Confirm purchase
|
|
|
+ self.confirm_purchase_order(purchase_order.id)
|
|
|
+ self.make_info_log('Purchase order confirmed')
|
|
|
+
|
|
|
+ # Create invoice
|
|
|
+ invoice_ids = self.create_invoice(purchase_order.id)
|
|
|
+ self.make_info_log('Invoice created')
|
|
|
+
|
|
|
+ print(invoice_ids)
|
|
|
|
|
|
return {
|
|
|
'status': 'ok'
|