10 changed files with 204 additions and 0 deletions
@ -0,0 +1 @@ |
|||||
|
import models |
@ -0,0 +1,34 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Item number |
||||
|
# |
||||
|
# Copyright (C) 2016 Cybrosys Techno Solutions (<http://http://www.cybrosys.com). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Affero General Public License as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# 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 Affero General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
{ |
||||
|
'name': 'SALE ORDER SPLITTER', |
||||
|
'version': '1.0', |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'website': 'http://www.cybrosys.com', |
||||
|
'sequence': 6, |
||||
|
'category': 'Sales Management', |
||||
|
'summary': 'Used for splitting lengthy quotations into suppurate.', |
||||
|
'data': ['views/splitter.xml'], |
||||
|
'depends': ['base','sale'], |
||||
|
'installable': True |
||||
|
} |
@ -0,0 +1 @@ |
|||||
|
import splitter |
@ -0,0 +1,91 @@ |
|||||
|
|
||||
|
from openerp import fields, models, api |
||||
|
|
||||
|
|
||||
|
class config_bool(models.Model): |
||||
|
_inherit = 'sale.config.settings' |
||||
|
|
||||
|
conf_bool = fields.Boolean(string="Enables Sale order splitting") |
||||
|
|
||||
|
|
||||
|
class wizard(models.TransientModel): |
||||
|
_name = 'split.button.wiz' |
||||
|
temp = 1 |
||||
|
|
||||
|
line_count = fields.Char('Divide By', required=True) |
||||
|
|
||||
|
@api.one |
||||
|
def confirm_split(self,vals): |
||||
|
line_ids = [] |
||||
|
so_create = [] |
||||
|
so_id = vals['active_id'] |
||||
|
sale_obj = self.pool.get('sale.order').browse(self._cr, self._uid, so_id) |
||||
|
countt= 0 |
||||
|
for lines in sale_obj.order_line: |
||||
|
create_obt = { |
||||
|
'product_id': lines.product_id.id, |
||||
|
'name': lines.name, |
||||
|
'product_uom_qty': lines.product_uom_qty, |
||||
|
'price_unit': lines.price_unit, |
||||
|
'tax_id': lines.tax_id, |
||||
|
'product_uom': lines.product_uom.id, |
||||
|
'price_subtotal': lines.price_subtotal |
||||
|
} |
||||
|
so_create.append((0, 0, create_obt)) |
||||
|
line_ids.append({'ids': lines.id}) |
||||
|
if len(line_ids) == int(self.line_count): |
||||
|
countt = countt + 1 |
||||
|
self.pool.get('sale.order').create(self._cr, self._uid, { |
||||
|
'name': sale_obj.name + '/00' + str(countt), |
||||
|
'partner_id': sale_obj.partner_id.id, |
||||
|
'validity_date': sale_obj.validity_date, |
||||
|
'order_line': so_create, |
||||
|
'pricelist_id': sale_obj.pricelist_id.id |
||||
|
}) |
||||
|
so_create = [] |
||||
|
for idss in line_ids: |
||||
|
self._cr.execute("delete from sale_order_line where id = %s", [idss['ids']]) |
||||
|
line_ids = [] |
||||
|
self.temp = 0 |
||||
|
|
||||
|
|
||||
|
self.temp += 1 |
||||
|
counted=0 |
||||
|
for i in sale_obj.order_line: |
||||
|
counted += 1 |
||||
|
if counted == 0: |
||||
|
self._cr.execute("delete from sale_order where id = %s", [sale_obj.id]) |
||||
|
else: |
||||
|
untaxed_total = 0.0 |
||||
|
tax = 0.0 |
||||
|
for line in sale_obj.order_line: |
||||
|
untaxed_total += line.price_subtotal |
||||
|
tax += line.price_tax |
||||
|
|
||||
|
sale_obj.amount_untaxed = sale_obj.pricelist_id.currency_id.round(untaxed_total) |
||||
|
sale_obj.amount_tax = sale_obj.pricelist_id.currency_id.round(tax) |
||||
|
sale_obj.amount_total = sale_obj.amount_untaxed + sale_obj.amount_tax |
||||
|
|
||||
|
|
||||
|
class button_split(models.Model): |
||||
|
|
||||
|
_inherit = 'sale.order' |
||||
|
|
||||
|
|
||||
|
parent_id = fields.Char() |
||||
|
|
||||
|
def button_split(self, cr, uid, ids, context=None): |
||||
|
return { |
||||
|
'name': 'Confirm Split', |
||||
|
|
||||
|
'type': 'ir.actions.act_window', |
||||
|
|
||||
|
'view_mode': 'form', |
||||
|
|
||||
|
'res_model': 'split.button.wiz', |
||||
|
|
||||
|
'target': 'new', |
||||
|
|
||||
|
'vals': self.pool.get('sale.order').browse(cr, uid, ids).id |
||||
|
|
||||
|
} |
After Width: | Height: | Size: 140 KiB |
@ -0,0 +1,48 @@ |
|||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 class="oe_slogan">Split Sale Quotation</h2> |
||||
|
<h3 class="oe_slogan">Split Quotation Button</h3> |
||||
|
<div class="oe_span6"> |
||||
|
<div class="oe_demo oe_picture oe_screenshot"> |
||||
|
<img src="screen1.png" alt="Online Demo"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="oe_span6"> |
||||
|
<p class='oe_mt32'> |
||||
|
Split the quotations by clicking the split order |
||||
|
button. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<h3 class="oe_slogan">Split Confirm Wizard</h3> |
||||
|
<div class="oe_row"> |
||||
|
<div class="oe_span6"> |
||||
|
<p class='oe_mt32'> |
||||
|
Enter the count to be split from quotation order-line. |
||||
|
</p> |
||||
|
</div> |
||||
|
<div class="oe_span6"> |
||||
|
<img class="oe_picture oe_screenshot" src="screen2.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<h3 class="oe_slogan">Naming The Sale Quotations After Split </h3> |
||||
|
<div class="oe_row"> |
||||
|
<div class="oe_span6"> |
||||
|
<img class="oe_picture oe_screenshot" src="screen3.png"> |
||||
|
</div> |
||||
|
<div class="oe_span6"> |
||||
|
<p class='oe_mt32'> |
||||
|
All the quotations split from a sale order have the name |
||||
|
as count followed by the parent sale order. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
After Width: | Height: | Size: 353 KiB |
After Width: | Height: | Size: 271 KiB |
After Width: | Height: | Size: 136 KiB |
@ -0,0 +1,29 @@ |
|||||
|
<openerp> |
||||
|
<data> |
||||
|
<record id="button_wizard" model="ir.ui.view"> |
||||
|
<field name="name">button.wizard</field> |
||||
|
<field name="model">split.button.wiz</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form> |
||||
|
<p>Enter number of order lines by the order of which the sale order to be split .</p> |
||||
|
<group> <group><field name="line_count"/></group><group></group></group> |
||||
|
<footer> |
||||
|
<button name="confirm_split" type="object" string="Split" class="oe_highlight"/> |
||||
|
<button string="Cancel" class="btn-default" special="cancel" /> |
||||
|
</footer> |
||||
|
</form> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
<record id="sale_split_button" model="ir.ui.view"> |
||||
|
<field name="name">sale_split_button</field> |
||||
|
<field name="model">sale.order</field> |
||||
|
<field name="inherit_id" ref="sale.view_order_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='state']" position="before"> |
||||
|
<button name="button_split" type="object" states="draft" string="Split Quotation" attrs="{'invisible': [('state','not in', ('draft'))]}"/> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</openerp> |
Loading…
Reference in new issue