Browse Source

Merge Lines In SO

pull/9/merge
SHEREEF PT 8 years ago
parent
commit
c5c04eac07
  1. 11
      merge_same_products/README.rst
  2. 23
      merge_same_products/__init__.py
  3. 40
      merge_same_products/__openerp__.py
  4. 26
      merge_same_products/models/__init__.py
  5. 139
      merge_same_products/models/merge_in_invoice.py
  6. 119
      merge_same_products/models/merge_in_purchase.py
  7. 145
      merge_same_products/models/merge_in_sales.py
  8. BIN
      merge_same_products/static/description/banner.jpg
  9. BIN
      merge_same_products/static/description/cybro_logo.png
  10. BIN
      merge_same_products/static/description/icon.png
  11. 109
      merge_same_products/static/description/index.html
  12. BIN
      merge_same_products/static/description/invoice_after.png
  13. BIN
      merge_same_products/static/description/invoice_before_save.png
  14. BIN
      merge_same_products/static/description/purchase_after.png
  15. BIN
      merge_same_products/static/description/purchase_before_save.png
  16. BIN
      merge_same_products/static/description/sale_before_save.png
  17. BIN
      merge_same_products/static/description/sale_order_after.png

11
merge_same_products/README.rst

@ -0,0 +1,11 @@
Merge Same Product Lines
========================
This module will merge the order lines/invoice with same product in the sale order line, purchase order line and account invoice line.
Credits
=======
Cybrosys Techno Solutions
Author
------
* Cybrosys <www.cybrosys.com>

23
merge_same_products/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Niyas Raphy(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import models

40
merge_same_products/__openerp__.py

@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Niyas Raphy(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Merge Same Products in Sale Order Lines',
'version': '0.1',
'description': """Merge order lines with same products in sale order lines, purchase order lines & invoice lines""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'website': 'http://www.cybrosys.com',
'summary': "Merge order lines with same products in sale order lines, purchase order lines & invoice lines",
'category': 'sale',
'depends': ['account', 'base', 'sale', 'purchase'],
'license': 'AGPL-3',
'data': [],
'demo': [],
'images': ['static/description/banner.jpg'],
'installable': True,
'auto_install': False,
}

26
merge_same_products/models/__init__.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Niyas Raphy(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import merge_in_sales
import merge_in_purchase
import merge_in_invoice

139
merge_same_products/models/merge_in_invoice.py

@ -0,0 +1,139 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Niyas Raphy(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import api, models
class AccountInvoiceAppend(models.Model):
_inherit = "account.invoice"
@api.model
def create(self, vals):
if "invoice_line" in vals.keys():
product_list = []
for obj in vals['invoice_line']:
if obj[2]:
if "product_id" in obj[2]:
if obj[2]['product_id'] not in product_list:
product_list.append(obj[2]['product_id'])
list_new = vals['invoice_line']
new_list = []
for obj in product_list:
count = 0
qty = 0
for ele in list_new:
if obj == ele[2]['product_id']:
count += 1
qty += ele[2]['quantity']
if count == 1:
new_list.append(ele)
for att in new_list:
if obj == att[2]['product_id']:
att[2]['quantity'] = qty
vals['invoice_line'] = new_list
res = super(AccountInvoiceAppend, self).create(vals)
return res
@api.one
def write(self, vals):
product_list_ext = []
product_list_new = []
if "invoice_line" in vals.keys():
new_list = vals['invoice_line']
for att in new_list:
if att[0] == 4:
s = self.invoice_line.browse(att[1])
if s.product_id.id not in product_list_ext:
product_list_ext.append(s.product_id.id)
if att[0] == 0:
if att[2]['product_id'] not in product_list_new:
product_list_new.append(att[2]['product_id'])
pro_list = []
for obj in product_list_new:
pro_qty = 0
if obj in product_list_ext:
for att in new_list:
if att[0] == 4:
o = self.invoice_line.browse(att[1])
if o.product_id.id == obj:
pro_qty += o.quantity
if att[1] == 0:
if att[2]['product_id'] == obj:
pro_qty += 1
for att1 in new_list:
if att1[0] == 4:
o = self.invoice_line.browse(att1[1])
if o.product_id.id == obj:
o.quantity = pro_qty
for obj1 in product_list_new:
pro_qty = 0
count = 0
if obj not in product_list_ext:
for att1 in new_list:
if att1[0] == 0:
if att1[2]['product_id'] == obj1:
pro_qty += att1[2]['quantity']
for att2 in new_list:
if att2[0] == 0:
if att2[2]['product_id'] == obj:
count += 1
if count == 1:
att2[2]['quantity'] = pro_qty
pro_list.append(att2)
for obj2 in product_list_ext:
if obj2 not in product_list_new:
for att2 in new_list:
if att2[0] == 4:
o = self.invoice_line.browse(att2[1])
if o.product_id == obj2:
pro_list.append(att2)
for att3 in new_list:
if att3[0] == 2:
pro_list.append(att3)
if att3[0] == 1:
o = self.invoice_line.browse(att3[1])
if "quantity" in att3[2]:
o.quantity = att3[2]['quantity']
vals['invoice_line'] = pro_list
res = super(AccountInvoiceAppend, self).write(vals)
return res

119
merge_same_products/models/merge_in_purchase.py

@ -0,0 +1,119 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Niyas Raphy(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import api, models
class PurchaseOrderAppend(models.Model):
_inherit = "purchase.order"
@api.model
def create(self, vals):
if "order_line" in vals.keys():
product_list = []
for obj in vals['order_line']:
if obj[2]['product_id'] not in product_list:
product_list.append(obj[2]['product_id'])
list_new = vals['order_line']
new_list = []
for obj in product_list:
count = 0
qty = 0
for ele in list_new:
if obj == ele[2]['product_id']:
count += 1
qty += ele[2]['product_qty']
if count == 1:
new_list.append(ele)
for att in new_list:
if obj == att[2]['product_id']:
att[2]['product_qty'] = qty
vals['order_line'] = new_list
res = super(PurchaseOrderAppend, self).create(vals)
return res
@api.one
def write(self, vals):
product_list_ext = []
product_list_new = []
if "order_line" in vals.keys():
new_list = vals['order_line']
pro_list = []
for att in new_list:
if att[0] == 4:
s = self.order_line.browse(att[1])
if s.product_id.id not in product_list_ext:
product_list_ext.append(s.product_id.id)
if att[0] == 0:
if att[2]['product_id'] not in product_list_new:
product_list_new.append(att[2]['product_id'])
for obj in product_list_new:
pro_qty = 0
if obj in product_list_ext:
for att in new_list:
if att[0] == 4:
o = self.order_line.browse(att[1])
if o.product_id.id == obj:
pro_qty += o.product_qty
if att[1] == 0:
if att[2]['product_id'] == obj:
pro_qty += att[2]['product_qty']
for att1 in new_list:
if att1[0] == 4:
o = self.order_line.browse(att1[1])
if o.product_id.id == obj:
o.product_qty = pro_qty
for obj1 in product_list_new:
pro_qty = 0
count = 0
if obj not in product_list_ext:
for att1 in new_list:
if att1[0] == 0:
if att1[2]['product_id'] == obj1:
pro_qty += 1
for att2 in new_list:
if att2[0] == 0:
if att2[2]['product_id'] == obj:
count += 1
if count == 1:
att2[2]['product_qty'] = pro_qty
pro_list.append(att2)
for obj2 in product_list_ext:
if obj2 not in product_list_new:
for att2 in new_list:
if att2[0] == 4:
o = self.order_line.browse(att2[1])
if o.product_id == obj2:
pro_list.append(att2)
for att3 in new_list:
if att3[0] == 2:
pro_list.append(att3)
if att3[0] == 1:
o = self.order_line.browse(att3[1])
o.product_qty = att3[2]['product_qty']
vals['order_line'] = pro_list
res = super(PurchaseOrderAppend, self).write(vals)
return res

145
merge_same_products/models/merge_in_sales.py

@ -0,0 +1,145 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Niyas Raphy(<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import api, models
class SaleOrderAppend(models.Model):
_inherit = "sale.order"
@api.model
def create(self, vals):
if "order_line" in vals.keys():
product_list = []
for obj in vals['order_line']:
if obj[2]['product_id'] not in product_list:
product_list.append(obj[2]['product_id'])
list_new = vals['order_line']
new_list = []
for obj in product_list:
count = 0
qty = 0
for element in list_new:
if obj == element[2]['product_id']:
qty += element[2]['product_uom_qty']
for ele in list_new:
if obj == ele[2]['product_id']:
count += 1
if count == 1:
ele[2]['product_uom_qty'] = qty
ele[2]['product_uos_qty'] = qty
new_list.append(ele)
vals['order_line'] = new_list
res = super(SaleOrderAppend, self).create(vals)
return res
@api.one
def write(self, vals):
product_list_ext = []
product_list_new = []
if "order_line" in vals.keys():
new_list = vals['order_line']
pro_list = []
for att in new_list:
if att[0] == 4:
s = self.order_line.browse(att[1])
if s.product_id not in product_list_ext:
product_list_ext.append(s.product_id.id)
if att[0] == 0:
if att[2]['product_id'] not in product_list_new:
product_list_new.append(att[2]['product_id'])
for obj in product_list_new:
pro_qty = 0
if obj in product_list_ext:
for att in new_list:
if att[0] == 4:
o = self.order_line.browse(att[1])
if o.product_id.id == obj:
pro_qty += o.product_uom_qty
if att[1] == 0:
if att[2]['product_id'] == obj:
pro_qty += att[2]['product_uom_qty']
for att1 in new_list:
if att1[0] == 4:
o = self.order_line.browse(att1[1])
if o.product_id.id == obj:
o.product_uom_qty = pro_qty
o.product_uos_qty = pro_qty
for obj1 in product_list_new:
pro_qty = 0
count = 0
if obj1 not in product_list_ext:
for att1 in new_list:
if att1[0] == 0:
if att1[2]['product_id'] == obj1:
pro_qty += att1[2]['product_uom_qty']
for att2 in new_list:
if att2[0] == 0:
if att2[2]['product_id'] == obj1:
count += 1
if count == 1:
att2[2]['product_uom_qty'] = pro_qty
att2[2]['product_uos_qty'] = pro_qty
pro_list.append(att2)
for obj2 in product_list_ext:
if obj2 not in product_list_new:
for att2 in new_list:
if att2[0] == 4:
o = self.order_line.browse(att2[1])
if o.product_id.id == obj2:
pro_list.append(att2)
for att3 in new_list:
if att3[0] == 2:
pro_list.append(att3)
if att3[0] == 1:
o = self.order_line.browse(att3[1])
o.product_uom_qty = att3[2]['product_uom_qty']
vals['order_line'] = pro_list
res = super(SaleOrderAppend, self).write(vals)
return res

BIN
merge_same_products/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
merge_same_products/static/description/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
merge_same_products/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

109
merge_same_products/static/description/index.html

@ -0,0 +1,109 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">Merging Same Product Line</h2>
<h3 class="oe_slogan">It helps to merge same products in order lines & invoice lines</h3>
<h4 class="oe_slogan">Author : Cybrosys Techno Solutions, www.cybrosys.com</h4>
</div>
<div class="oe_row oe_spaced">
<div class="oe_span12">
<p class='oe_mt32'>
&#x261B;This module enables the feature to merge same products in the sale order line , purchase order line & invoice line into one on saving.
</p>
<div class="oe_centeralign oe_websiteonly">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row">
<h2 class="oe_slogan">Sale Order</h2>
<div class="oe_span6">
<p class='oe_mt32'>
Before saving the sale order<br>
</p>
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="sale_before_save.png">
</div>
</div>
<div class="oe_span6">
<p class='oe_mt32'>
After saving the sale order <br>
</p>
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="sale_order_after.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row">
<h2 class="oe_slogan">Purchase Order</h2>
<div class="oe_span6">
<p class='oe_mt32'>
Before saving the order<br>
</p>
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="purchase_before_save.png">
</div>
</div>
<div class="oe_span6">
<p class='oe_mt32'>
After saving the order <br>
</p>
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="purchase_after.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row">
<h2 class="oe_slogan">Invoice</h2>
<div class="oe_span6">
<p class='oe_mt32'>
Before saving the order<br>
</p>
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="invoice_before_save.png">
</div>
</div>
<div class="oe_span6">
<p class='oe_mt32'>
After saving the order <br>
</p>
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="invoice_after.png">
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2>
<div class="oe_slogan" style="margin-top:10px !important;">
<a class="btn btn-primary btn-lg mt8"
style="color: #FFFFFF !important;" href="http://www.cybrosys.com"><i
class="fa fa-envelope"></i> Email </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="http://www.cybrosys.com/contact/"><i
class="fa fa-phone"></i> Contact Us </a> <a
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;"
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i
class="fa fa-check-square"></i> Request Customization </a>
</div>
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block">
</section>

BIN
merge_same_products/static/description/invoice_after.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

BIN
merge_same_products/static/description/invoice_before_save.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
merge_same_products/static/description/purchase_after.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

BIN
merge_same_products/static/description/purchase_before_save.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

BIN
merge_same_products/static/description/sale_before_save.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
merge_same_products/static/description/sale_order_after.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Loading…
Cancel
Save