Rodney Elpidio Enciso Arias 7 lat temu
commit
7f128e783a

+ 2 - 0
__init__.py

@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+from model import sale_order

BIN
__init__.pyc


+ 21 - 0
__openerp__.py

@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+{
+    'name' : 'Eiru Purchase to Sale',
+    'version' : '1.0',
+    'description' : """
+    """,
+    'author' : 'Eiru',
+    'category' : 'sale',
+    'depends' : [
+        'sale',
+        'purchase',
+        'product_variant_search_by_attribute',
+    ],
+    'data' : [
+        'views/template.xml',
+        'views/sale_order_search_box.xml',
+    ],
+    'qweb' : ['static/src/xml/*.xml',],
+    'installable' : True,
+    'auto_install' : False,
+}

+ 0 - 0
model/__init__.py


BIN
model/__init__.pyc


BIN
model/sale.pyc


+ 35 - 0
model/sale_order.py

@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+
+from openerp import api, fields, models
+from openerp.exceptions import except_orm
+
+class SaleOrder(models.Model):
+	_inherit = 'sale.order'
+
+	amount_untaxed = fields.Float( compute='_compute_amount_all') 
+	amount_tax = fields.Float( compute='_compute_amount_all') 
+	amount_total = fields.Float( compute='_compute_amount_all') 
+
+	@api.model
+	def join_sale_order_lines(self, values):
+		self.env['sale.order.line'].search([('order_id','=',self.id)]).unlink()
+		new_line = self.env['sale.order.line']
+		for x in values:
+			sale_order_line = ( {
+				'order_id': x['order_id'],
+                'product_id': x['product_id'],
+                'product_uom_qty': x['product_uom_qty'],
+			})
+			new_line.create(sale_order_line)
+
+	@api.depends('order_line.price_subtotal')
+	def _compute_amount_all(self):
+		for order in self:
+			amount_tax = amount_untaxed = 0.0
+			currency = order.currency_id.with_context(date=order.date_order or fields.Date.context_today(order))
+			for line in order.order_line:
+				amount_untaxed += line.price_subtotal
+				amount_tax += (line.product_uom_qty * line.price_unit) - line.price_subtotal
+			order.amount_tax = currency.round(amount_tax)
+			order.amount_untaxed = currency.round(amount_untaxed)
+			order.amount_total = currency.round(amount_tax + amount_untaxed)

BIN
model/sale_order.pyc


BIN
static/description/icon.png


+ 157 - 0
static/src/js/main.js

@@ -0,0 +1,157 @@
+openerp.eiru_purchase_to_sale = function (instance, local) {
+    local.widgetInstance = null;
+    local.parentInstance = null;
+
+    local.PurchaseToSaleWidget = instance.Widget.extend({
+        template : "eiru_purchase_to_sale.PurchaseToSale",
+        init:function(parent){
+            this._super(parent);
+            this.buttons = parent.$buttons;
+        },
+
+        updateId : function(id){
+            var self = this;
+            self.id=id;
+        },
+
+        reloadLine: function() {
+            local.parentInstance.reload();
+        },
+
+        start: function () {
+            var self = this;
+            this.$el.click(function () {
+                self.fecthInitial();
+            });
+        },
+
+        fecthInitial: function(){
+            var id= openerp.webclient._current_state.id;
+            var self = this;
+            self.fecthSaleOrder(id).then(function(SaleOrder){
+                return SaleOrder;
+            }).then(function(SaleOrder){
+                self.SaleOrder = SaleOrder;
+                return self.fetchPurchaseOrder();
+            }).then(function(PurchaseOrder){
+                self.PurchaseOrder = PurchaseOrder;
+                return self.fetchPurchaseOrderLine();
+            }).then(function(PurchaseOrderLine){
+                self.PurchaseOrderLine = PurchaseOrderLine;
+                self.inicializarBuscador();
+            });
+            return false;
+        },
+
+        fecthSaleOrder: function(id){
+            var defer = $.Deferred();
+            var fields=['id'];
+            var domain=[['id','=', id]];
+            var SaleOrder = new instance.web.Model('sale.order');
+            SaleOrder.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fetchPurchaseOrder: function () {
+            var defer = $.Deferred();
+            var fields=['id','name'];
+            var domain=[['state','=','draft']];
+            var PurchaseOrder = new instance.web.Model('purchase.order');
+            PurchaseOrder.query(fields).filter(domain).order_by('id').all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fetchPurchaseOrderLine: function () {
+            var defer = $.Deferred();
+            var fields=['id','product_id','order_id','product_qty'];
+            var domain=[['state','=','draft']];
+            var PurchaseOrderLine = new instance.web.Model('purchase.order.line');
+            PurchaseOrderLine.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        inicializarBuscador: function () {
+            var self = this;
+            var SelectOrder;
+            var results = self.PurchaseOrder;
+            results = _.map(results, function (item) {
+            return {
+                    label: item.name,
+                    value: item.id + '-' + item.name
+                }
+            });
+            $('#PurchaseSearch').autocomplete({
+                source: results,
+                minLength: 3,
+                select: function (e, ui) {
+                    $(this).val('');
+                    SelectOrder = ui.item;
+                    self.factInsertProduct(SelectOrder);
+                    return false;
+                }  
+            });
+        },
+
+        getPurchaseOrderLine:function(id) {
+            var self = this;
+            return _.flatten(_.filter(self.PurchaseOrderLine,function (inv) {
+                return inv.order_id[0] == id;
+            }));
+        },
+
+        factInsertProduct:function(selectProduct){
+            var self = this;
+            var data = [];
+            var order = selectProduct.value.split('-');
+            var order_line = self.getPurchaseOrderLine(order[0]);
+            _.each(order_line, function(item){
+                data.push({
+                    order_id: self.SaleOrder[0].id,
+                    product_id: item.product_id[0],
+                    product_uom_qty: item.product_qty
+                });
+            });
+            self.joinSaleLine(data).then(function(results) {
+                return results;
+            }).then(function(){
+                self.reloadLine();
+            });
+        },
+
+        joinSaleLine: function(data) {
+            var self = this;
+            var defer = $.Deferred();
+            var SaleOrder = new openerp.web.Model('sale.order');
+            SaleOrder.call('join_sale_order_lines',[data], {
+                    context: new openerp.web.CompoundContext()
+            }).then(function(results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+    });
+
+    if (instance.web && instance.web.FormView) {
+        instance.web.FormView.include({
+            load_form: function (record) {
+                this._super.apply(this, arguments);
+                if (this.model !== 'sale.order') return;
+                local.parentInstance = this;
+                if (local.widgetInstance) {
+                    local.widgetInstance.updateId(record.id);
+                }
+                local.widgetInstance = new local.PurchaseToSaleWidget(this);
+                var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width');
+                elemento =  elemento.find('.product_search_box');
+                local.widgetInstance.appendTo(elemento);
+                local.widgetInstance.updateId(record.id);
+            }
+        });
+    }
+}

+ 11 - 0
static/src/xml/view.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="eiru_purchase_to_sale.PurchaseToSale">
+        <div class="ui-widget col-md-8 col-md-offset-2">
+        	<div class="form-group">
+        		<label for="PurchaseSearch">Buscar: </label>
+		  		<input id="PurchaseSearch" class="form-control"/>
+        	</div>
+		</div>
+    </t>
+</template>

+ 15 - 0
views/sale_order_search_box.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+	<data>
+        <record id="views_eiru_sale_order" model="ir.ui.view">
+            <field name="name">eiru.sale.order.view</field>
+            <field name="model">sale.order</field>
+            <field name="inherit_id" ref="sale.view_order_form"/>
+            <field name="arch" type="xml">
+                <field name="order_line" position="before">
+                    <div class="product_search_box" attrs="{'invisible': [('state','not in',['draft','sent'])]}"></div>
+                </field>
+            </field>
+        </record>
+	</data>
+</openerp>

+ 9 - 0
views/template.xml

@@ -0,0 +1,9 @@
+<openerp>
+    <data>
+        <template id="eiru_purchase_to_sale.assets_backend" name="purchase_to_sale_assets" inherit_id="eiru_assets.assets">
+            <xpath expr="." position="inside">
+                <script type="text/javascript" src="/eiru_purchase_to_sale/static/src/js/main.js"/>
+            </xpath>
+        </template>
+    </data>
+</openerp>