work on intercompany
89
intercompany_transaction_ept/README.rst
Normal file
@@ -0,0 +1,89 @@
|
||||
=============================================
|
||||
Inter Company Transfer and Warehouse Transfer
|
||||
=============================================
|
||||
Module to manage Inter Company Transfer and Inter Warehouse Transfer along with all required documents with easiest way by just simple configurations.
|
||||
|
||||
========
|
||||
Features
|
||||
========
|
||||
* **Common Features**
|
||||
* An easy interface to transfer products from one warehouse to another warehouse.
|
||||
* System will decide what kind of documents needs to be created based on companies of source warehouse and destination warehouses.
|
||||
* All documents created by just one click based on the configuration of the system.
|
||||
|
||||
* **Inter Warehouse Transfer (Intra company transfer)**
|
||||
* Creates Delivery Order in source warehouse & Receipts in Destination warehouse.
|
||||
* Smart buttons to view created Delivery Order & Receipt.
|
||||
* Allows users to do reverse transfer from the same screen. It will reverse the delivery order & receipt.
|
||||
|
||||
* **Inter Company Transfer**
|
||||
* Creates Sales Order from source warehouse & Purchase Order in destination warehouse if warehouses belongs to different companies.
|
||||
* Control over Invoice numbering / Refund numbering by specifying separate journals company wise.
|
||||
* System will allow you to control pricing from the same screen. Same price will apply on sales order of source company and purchase order of destination company.
|
||||
* An option to reverse entire / partial transactions with all effects. In case of Reverse intercompany transactions system will create reverse of delivery order, reverse of incoming shipment (only if they are done), debit note and credit note.
|
||||
* Control over all documents process like automatic workflow of all documents, whether need to create or not, auto confirm or not, auto validate or not. Like one can control Auto confirm Sales Orders/ Purchase Order or Generate & Validate Invoice and Cancel: create credit note and reconcile.
|
||||
* In multi company environment it’s not easy to create documents of multi companies without login to that company, with this app user can create all records related to intercompany transactions by just one click without login to that company, for that just need to set intercompany user company wise. So you can be sure that taxes applied on SO & PO are accurate according to the companies.
|
||||
|
||||
====================================
|
||||
Recommended ICT Configurations
|
||||
====================================
|
||||
|
||||
* **COMMON CONFIGURATIONS**
|
||||
* Company Specific
|
||||
Set Inter Company user
|
||||
Inter company users must have rights same as an admin (to avoid access rights issue during process) but can have an access to only single company in which you set it.
|
||||
Set customer invoice and vendor bill journal (Optional)
|
||||
|
||||
* Warehouses Specific
|
||||
Set resupply warehouses in warehouse to generate automatic routes for internal transfers
|
||||
* Product Specific
|
||||
If products are common for all companies then remove / do not set company in products (if products needs to be shared by all companies).
|
||||
Vendor price configurations.
|
||||
Set routes in product
|
||||
|
||||
* Partners Specific
|
||||
Set customer location & Vendor location in partner
|
||||
Access Right: Inter company users must have an access of following areas.
|
||||
Sales Manager
|
||||
Purchase Manager
|
||||
Inventory Manager
|
||||
Accounting Manager
|
||||
Multi Warehouses
|
||||
ICT Manager
|
||||
|
||||
* ICT Configurations (Automatic workflow)
|
||||
Auto confirm sale / purchase order
|
||||
Auto create invoice
|
||||
Auto validate invoice
|
||||
* Reverse ICT
|
||||
Create a draft credit note
|
||||
Cancel: create credit note and reconcile
|
||||
|
||||
* **COMPANY WISE CONFIGURATIONS**
|
||||
(Company wise configurations means user need to login to each company and need to do configurations. Value of the fields might different company by company, field is unique but value might different for each company.)
|
||||
|
||||
* Product
|
||||
Customer taxes and vendor taxes
|
||||
* Partners
|
||||
Set customer price list for partner for each companies
|
||||
Set fiscal position for partner for each companies
|
||||
============
|
||||
Similar Apps
|
||||
============
|
||||
Inter Company Transfer
|
||||
ICT
|
||||
Internal Transfer
|
||||
Warehouse transfer
|
||||
warehouse to warehouse transfer
|
||||
Intercompany transfer
|
||||
company to company transfer
|
||||
transfer between warehouses
|
||||
transfer between companies
|
||||
the inter company transfer with odoo
|
||||
odoo intercompany
|
||||
inter company transaction in odoo
|
||||
warehouse transfer odoo
|
||||
odoo inter warehouse transfer
|
||||
odoo internal company transfer
|
||||
odoo inter company transfer
|
||||
odoo intra company transfer
|
||||
33
intercompany_transaction_ept/__init__.py
Normal file
@@ -0,0 +1,33 @@
|
||||
from . import models
|
||||
from . import wizard
|
||||
from . import report
|
||||
from odoo.api import Environment, SUPERUSER_ID
|
||||
import logging
|
||||
|
||||
_logger=logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
multi_company_ir_rules = {'stock.stock_warehouse_comp_rule':'stock.group_stock_user',
|
||||
'stock.stock_location_comp_rule':'stock.group_stock_user',
|
||||
'stock.stock_picking_type_rule':'stock.group_stock_user'}
|
||||
|
||||
|
||||
|
||||
def uninstall_hook_update_rule(cr, registry):
|
||||
env = Environment(cr, SUPERUSER_ID, {})
|
||||
for rule_xml_id,group_xml_id in multi_company_ir_rules.items() :
|
||||
rule = env.ref(rule_xml_id)
|
||||
group = env.ref(group_xml_id)
|
||||
if group in rule.groups :
|
||||
rule.write({'groups':[(3,group.id)]})
|
||||
|
||||
|
||||
def post_init_update_rule(cr,registry):
|
||||
env = Environment(cr, SUPERUSER_ID, {})
|
||||
for rule_xml_id,group_xml_id in multi_company_ir_rules.items() :
|
||||
rule = env.ref(rule_xml_id)
|
||||
group = env.ref(group_xml_id)
|
||||
if rule and group :
|
||||
if group not in rule.groups :
|
||||
rule.write({'groups':[(4,group.id)]})
|
||||
50
intercompany_transaction_ept/__manifest__.py
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
|
||||
# App information
|
||||
'name': 'Inter Company Transfer and Warehouse Transfer',
|
||||
'version': '12.0',
|
||||
'category': 'stock',
|
||||
'license': 'OPL-1',
|
||||
'summary' : 'Module to manage Inter Company Transfer and Inter Warehouse Transfer along with all required documents with easiest way by just simple configurations.',
|
||||
|
||||
|
||||
# Author
|
||||
|
||||
'author': 'Emipro Technologies Pvt. Ltd.',
|
||||
'website': 'http://www.emiprotechnologies.com/',
|
||||
'maintainer': 'Emipro Technologies Pvt. Ltd.',
|
||||
|
||||
# Dependencies
|
||||
|
||||
'depends': ['delivery', 'sale', 'purchase', 'stock', 'barcodes'],
|
||||
'data': [
|
||||
'data/ir_sequence.xml',
|
||||
'data/intercompany_transaction_config.xml',
|
||||
'views/inter_company_transfer_views.xml',
|
||||
'views/inter_company_transfer_config_views.xml',
|
||||
'views/rescompany_views.xml',
|
||||
'views/sale_views.xml',
|
||||
'views/purchase_views.xml',
|
||||
'views/stock_picking_views.xml',
|
||||
'views/all_search_views.xml',
|
||||
'wizard/reverse_inter_company_transfer_views.xml',
|
||||
'wizard/import_export_product_list_views.xml',
|
||||
'security/inter_company_transfer_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'views/inter_company_transfer_process_log_views.xml'
|
||||
],
|
||||
|
||||
# Odoo Store Specific
|
||||
'images': ['static/description/Inter-Company-Transfer-cover.png'],
|
||||
|
||||
# Technical
|
||||
'post_init_hook': 'post_init_update_rule',
|
||||
'uninstall_hook': 'uninstall_hook_update_rule',
|
||||
'live_test_url': 'https://www.emiprotechnologies.com/free-trial?app=intercompany-transaction-ept&version=12&edition=enterprise',
|
||||
'active': True,
|
||||
'installable': True,
|
||||
'currency': 'EUR',
|
||||
'price': 149.00,
|
||||
'auto_install': False,
|
||||
'application': True,
|
||||
}
|
||||
BIN
intercompany_transaction_ept/__pycache__/__init__.cpython-36.pyc
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="intercompany_transaction_config_record" model="inter.company.transfer.config.ept">
|
||||
<field name='sequence_id' eval="ref('ir_sequence_intercompany_transaction')"></field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
39
intercompany_transaction_ept/data/ir_sequence.xml
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="ir_sequence_intercompany_transaction" model="ir.sequence">
|
||||
<field name="name">Intercompany Transfer</field>
|
||||
<field name="prefix" >ICT</field>
|
||||
<field name="padding" >3</field>
|
||||
<field name="number_increment" >1</field>
|
||||
<field name="number_next_actual" >1</field>
|
||||
<field name="company_id" ref="base.main_company" ></field>
|
||||
</record>
|
||||
|
||||
<record id="ir_sequence_reverse_intercompany_transaction" model="ir.sequence">
|
||||
<field name="name">Reverse Intercompany Transaction</field>
|
||||
<field name="prefix" >RICT</field>
|
||||
<field name="padding" >3</field>
|
||||
<field name="number_increment" >1</field>
|
||||
<field name="number_next_actual" >1</field>
|
||||
<field name="company_id" ref="base.main_company" ></field>
|
||||
</record>
|
||||
|
||||
<record id="ir_sequence_internal_transfer_intercompany_transaction" model="ir.sequence">
|
||||
<field name="name">Internal Transfer</field>
|
||||
<field name="prefix" >INTICT</field>
|
||||
<field name="padding" >3</field>
|
||||
<field name="number_increment" >1</field>
|
||||
<field name="number_next_actual" >1</field>
|
||||
<field name="company_id" ref="base.main_company" ></field>
|
||||
</record>
|
||||
|
||||
<record forcecreate="1" id="inter_company_process_log_seq" model="ir.sequence">
|
||||
<field name="name">Inter Company Transfer LOG</field>
|
||||
<field name="code">ict_log</field>
|
||||
<field name="padding">4</field>
|
||||
<field name="prefix">LOG</field>
|
||||
<field name="company_id" eval="False" />
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
9
intercompany_transaction_ept/models/__init__.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from . import inter_company_transfer_ept
|
||||
from . import inter_company_transfer_line_ept
|
||||
from . import inter_company_transfer_config_ept
|
||||
from . import res_company
|
||||
from . import sale
|
||||
from . import purchase
|
||||
from . import stock_picking
|
||||
from . import account_invoice
|
||||
from . import inter_company_transfer_log_process_ept
|
||||
19
intercompany_transaction_ept/models/account_invoice.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from odoo import api, models, fields , _
|
||||
|
||||
class AccountInvoice(models.Model):
|
||||
|
||||
_inherit = 'account.move'
|
||||
_description = 'Account Invoice'
|
||||
|
||||
|
||||
intercompany_transfer_id = fields.Many2one('inter.company.transfer.ept', string="ICT", copy=False)
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
res = super(AccountInvoice, self).create(vals)
|
||||
order_id = self.env['sale.order'].search([('name', '=', res.origin)])
|
||||
if not order_id:
|
||||
order_id = self.env['purchase.order'].search([('name', '=', res.origin)])
|
||||
if order_id and order_id.intercompany_transfer_id:
|
||||
res.intercompany_transfer_id = order_id.intercompany_transfer_id.id
|
||||
return res
|
||||
@@ -0,0 +1,28 @@
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import Warning
|
||||
|
||||
class InterCompanyTransferConfig(models.Model):
|
||||
_name = "inter.company.transfer.config.ept"
|
||||
_rec_name = "sequence_id"
|
||||
_description = 'Inter Company Transfer Config'
|
||||
|
||||
@api.model
|
||||
def _default_company(self):
|
||||
return self.env.user.company_id.id
|
||||
|
||||
description = fields.Char("Discription")
|
||||
|
||||
filter_refund = fields.Selection([('refund', 'Create a draft credit note'), ('cancel', 'Cancel: create credit note and reconcile')], default='refund', string='Refund Method', help='Refund base on this type. You can not Modify and Cancel if the invoice is already reconciled')
|
||||
|
||||
auto_confirm_orders = fields.Boolean('Auto Confirm Orders')
|
||||
auto_create_invoices = fields.Boolean('Auto Create Invoices')
|
||||
auto_validate_invoices = fields.Boolean('Auto Validate Invoices')
|
||||
|
||||
sequence_id = fields.Many2one('ir.sequence', 'Sequence')
|
||||
company_id = fields.Many2one('res.company', string='Company', readonly=True, compute=_default_company, store=True)
|
||||
|
||||
|
||||
|
||||
|
||||
def unlink(self):
|
||||
raise Warning(_("You can not delete this record"))
|
||||
@@ -0,0 +1,740 @@
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import UserError, ValidationError, Warning
|
||||
from datetime import datetime
|
||||
from lxml import etree
|
||||
|
||||
|
||||
class InterCompanyTransfer(models.Model):
|
||||
|
||||
_name = 'inter.company.transfer.ept'
|
||||
_description = "Internal Company Transfer"
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin', 'barcodes.barcode_events_mixin']
|
||||
_order = 'id desc'
|
||||
|
||||
def on_barcode_scanned(self, barcode):
|
||||
product_obj = self.env['product.product']
|
||||
intercompany_transferline_obj = self.env['inter.company.transfer.line.ept']
|
||||
|
||||
product_id = product_obj.search(['|', ('barcode', '=', barcode), ('default_code', '=', barcode)], limit=1)
|
||||
if not product_id:
|
||||
return {'warning': {
|
||||
'title': _('Warning'),
|
||||
'message': _('Product Not Found')
|
||||
},
|
||||
}
|
||||
current_id = self._origin
|
||||
line = intercompany_transferline_obj.search([('inter_transfer_id', '=', current_id.id), ('product_id', '=', product_id.id)], limit=1)
|
||||
if line:
|
||||
line.write({'quantity':line.quantity + 1})
|
||||
else:
|
||||
intercompany_transferline_obj.create({'inter_transfer_id':current_id.id,
|
||||
'product_id':product_id.id,
|
||||
'quantity':1})
|
||||
|
||||
|
||||
|
||||
def _get_default_team(self):
|
||||
return self.env['crm.team']._get_default_team_id()
|
||||
|
||||
@api.depends('log_ids')
|
||||
def _compute_log_ids(self):
|
||||
for ict in self:
|
||||
ict.log_count = len(ict.log_ids)
|
||||
|
||||
name = fields.Char('Name')
|
||||
message = fields.Char("Message", copy=False)
|
||||
|
||||
state = fields.Selection([('draft', 'Draft'), ('processed', 'Processed'), ('cancel', 'Cancelled')], string='State', copy=False, default='draft')
|
||||
type = fields.Selection([('ict', 'ICT'), ('ict_reverse', 'Reverce ICT'), ('internal', 'Internal')], string='Type', readonly=True, copy=False, default='ict')
|
||||
log_count = fields.Integer(string='Inter Company Log Count', compute='_compute_log_ids')
|
||||
|
||||
processed_date = fields.Datetime("Processed Date", copy=False)
|
||||
|
||||
source_warehouse_id = fields.Many2one('stock.warehouse', string='From Warehouse')
|
||||
source_company_id = fields.Many2one(related='source_warehouse_id.company_id', string="Source Company")
|
||||
destination_warehouse_id = fields.Many2one('stock.warehouse', string='To Warehouse')
|
||||
destination_company_id = fields.Many2one(related='destination_warehouse_id.company_id', string="Destination Company")
|
||||
|
||||
crm_team_id = fields.Many2one('crm.team', string="Sales Team", default=_get_default_team)
|
||||
price_list_id = fields.Many2one('product.pricelist', string="Price List")
|
||||
currency_id = fields.Many2one('res.currency', related="price_list_id.currency_id", string="Currency")
|
||||
incoming_shipment_id = fields.Many2one('stock.picking', string="Incoming Shipment", copy=False)
|
||||
group_id = fields.Many2one('procurement.group', string="Procurement Group", copy=False)
|
||||
|
||||
intercompany_transfer_id = fields.Many2one('inter.company.transfer.ept', string="ICT")
|
||||
reverse_intercompanytransfer_ids = fields.One2many('inter.company.transfer.ept', 'intercompany_transfer_id', string="Reverse ICT")
|
||||
|
||||
log_ids = fields.One2many('inter.company.transfer.log.ept', 'intercompany_transfer_id', string="Inter Company Log")
|
||||
|
||||
saleorder_ids = fields.One2many('sale.order', 'intercompany_transfer_id', sring='Sale Orders', copy=False)
|
||||
purchaseorder_ids = fields.One2many('purchase.order', 'intercompany_transfer_id', string="Purchase Order", copy=False)
|
||||
invoice_ids = fields.One2many('account.move', 'intercompany_transfer_id', String="Invoices", copy=False)
|
||||
picking_ids = fields.One2many('stock.picking', 'intercompany_transfer_id', string="Pickings", copy=False)
|
||||
intercompany_transferline_ids = fields.One2many('inter.company.transfer.line.ept', 'inter_transfer_id', string="Transfer Lines", copy=True)
|
||||
|
||||
_sql_constraints = [('src_dest_company_uniq', 'CHECK(source_warehouse_id!=destination_warehouse_id)', 'Source Warehouse and Destination warehouse must be different!')]
|
||||
|
||||
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
res = super(InterCompanyTransfer, self).create(vals)
|
||||
record_name = "NEW"
|
||||
if res.type == 'ict' or not res.type:
|
||||
sequence_id = self.env.ref('intercompany_transaction_ept.ir_sequence_intercompany_transaction').ids
|
||||
if sequence_id:
|
||||
record_name = self.env['ir.sequence'].browse(sequence_id).next_by_id()
|
||||
res.update({'name':record_name})
|
||||
elif res.type == 'ict_reverse':
|
||||
sequence_id = self.env.ref('intercompany_transaction_ept.ir_sequence_reverse_intercompany_transaction').ids
|
||||
if sequence_id:
|
||||
record_name = self.env['ir.sequence'].browse(sequence_id).next_by_id()
|
||||
res.update({'name':record_name})
|
||||
elif res.type == 'internal':
|
||||
sequence_id = self.env.ref('intercompany_transaction_ept.ir_sequence_internal_transfer_intercompany_transaction').ids
|
||||
if sequence_id:
|
||||
record_name = self.env['ir.sequence'].browse(sequence_id).next_by_id()
|
||||
res.update({'name':record_name})
|
||||
return res
|
||||
|
||||
|
||||
|
||||
@api.model
|
||||
def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
|
||||
context = self._context
|
||||
res = super(InterCompanyTransfer, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
|
||||
doc = etree.XML(res['arch'])
|
||||
if view_type in ['form', 'tree']:
|
||||
if context.get('type', 'ict_reverse') == 'ict_reverse':
|
||||
for node in doc.xpath("//tree[@string='Inter Company Transfer']"):
|
||||
node.set('create', 'false')
|
||||
for node in doc.xpath("//form[@string='Inter Company Transfer']"):
|
||||
node.set('create', 'false')
|
||||
res['arch'] = etree.tostring(doc)
|
||||
return res
|
||||
|
||||
@api.onchange('source_warehouse_id')
|
||||
def source_warehouse_id_onchange(self):
|
||||
if not self.source_warehouse_id:
|
||||
self.destination_warehouse_id = False
|
||||
return
|
||||
if self.source_warehouse_id == self.destination_warehouse_id:
|
||||
self.destination_warehouse_id = False
|
||||
self.currency_id = self.source_company_id.currency_id
|
||||
|
||||
res = {}
|
||||
if self.type == 'internal':
|
||||
domain = {'destination_warehouse_id': [('company_id', '=', self.source_company_id.id), ('id', '!=', self.source_warehouse_id.id)]}
|
||||
return {'domain': domain}
|
||||
elif self.type != 'internal':
|
||||
domain = {'destination_warehouse_id': [('company_id', '!=', self.source_company_id.id)]}
|
||||
return {'domain': domain}
|
||||
return res
|
||||
|
||||
|
||||
@api.onchange('destination_warehouse_id')
|
||||
def onchange_destination_warehouse_id(self):
|
||||
if not self.destination_warehouse_id:
|
||||
return False
|
||||
|
||||
if not self.source_company_id.sudo().intercompany_user_id:
|
||||
msg = 'Please Specify Inter Company User for Source Company'
|
||||
raise Warning(msg)
|
||||
|
||||
if not self.destination_company_id.sudo().intercompany_user_id:
|
||||
msg = 'Please Specify Inter Company User for Destination Company'
|
||||
raise Warning(msg)
|
||||
|
||||
self.price_list_id = self.destination_company_id.sudo().partner_id.sudo(self.source_company_id.intercompany_user_id.id).property_product_pricelist
|
||||
self.crm_team_id = self.destination_company_id.sudo().partner_id.sudo(self.source_company_id.intercompany_user_id.id).team_id
|
||||
return
|
||||
|
||||
|
||||
@api.onchange('price_list_id')
|
||||
def default_price(self):
|
||||
for record in self:
|
||||
for line in record.reverse_intercompanytransfer_ids:
|
||||
line.default_price_get()
|
||||
return
|
||||
|
||||
def action_process(self):
|
||||
invoice_obj = self.env['account.move']
|
||||
stock_immediate_transfer_obj = self.env['stock.immediate.transfer']
|
||||
sale_advance_paymentobj = self.env['sale.advance.payment.inv']
|
||||
|
||||
context = self._context.copy() or {}
|
||||
for record in self:
|
||||
sale_journal = record.source_company_id.sale_journal
|
||||
purchase_journal = record.destination_company_id.purchase_journal
|
||||
if not record.with_context(context).check_user_validation():
|
||||
continue
|
||||
|
||||
|
||||
if not record.intercompany_transferline_ids:
|
||||
msg = "Please Add the Product to Process Transaction"
|
||||
raise ValidationError(msg)
|
||||
|
||||
sale_user_id = record.sudo().source_company_id.intercompany_user_id.id
|
||||
purchase_user_id = record.sudo().destination_company_id.intercompany_user_id.id
|
||||
purchase_partner_id = record.source_company_id.sudo().partner_id
|
||||
|
||||
configuration_record = record.env.ref('intercompany_transaction_ept.intercompany_transaction_config_record')
|
||||
|
||||
if record.source_company_id == record.destination_company_id:
|
||||
is_create_transfer = self.create_internal_transfer()
|
||||
if is_create_transfer:
|
||||
record.write({'state':'processed', 'processed_date':datetime.today(), 'message':'ICT processed successfully by %s' % (self.env.user.name)})
|
||||
return
|
||||
|
||||
sale_orders = record.auto_create_saleorder()
|
||||
purchase_orders = record.auto_create_purchaseorder()
|
||||
|
||||
if configuration_record:
|
||||
if configuration_record.auto_confirm_orders:
|
||||
for order in sale_orders:
|
||||
order.write({'origin':record.name or ''})
|
||||
order.sudo(sale_user_id).action_confirm()
|
||||
|
||||
for order in purchase_orders:
|
||||
order.write({'origin':record.name or ''})
|
||||
order.sudo(purchase_user_id).button_confirm()
|
||||
|
||||
|
||||
|
||||
if configuration_record.auto_create_invoices:
|
||||
invoice_id = False
|
||||
for order in sale_orders:
|
||||
context = {"active_model": 'sale.order', "active_ids": [order.id], "active_id": order.id, 'open_invoices':True}
|
||||
if sale_journal:
|
||||
context.update({'default_journal_id':sale_journal.id})
|
||||
payment_id = sale_advance_paymentobj.sudo(sale_user_id).create({'advance_payment_method': 'delivered'})
|
||||
result = payment_id.with_context(context).sudo(sale_user_id).create_invoices()
|
||||
result = result.get('res_id', False)
|
||||
invoice_id = invoice_obj.sudo(sale_user_id).browse(result)
|
||||
invoice_id.sudo(sale_user_id).write({'date_invoice':str(datetime.today()), 'intercompany_transfer_id':self.id})
|
||||
|
||||
|
||||
vendor_bill_id = False
|
||||
for porder in purchase_orders:
|
||||
context = {'default_type': 'in_invoice', 'type': 'in_invoice', 'journal_type': 'purchase', 'default_purchase_id': porder.id}
|
||||
if purchase_journal:
|
||||
context.update({'default_journal_id':record.destination_company_id.purchase_journal.id})
|
||||
|
||||
invoice_dict = self.prepare_invoice_dict(record, purchase_partner_id, porder)
|
||||
invoice_vals = invoice_obj.sudo(purchase_user_id).with_context(context).new(invoice_dict)
|
||||
invoice_vals.purchase_id = porder.id
|
||||
invoice_vals.journal_id = invoice_vals.sudo(purchase_user_id)._default_journal()
|
||||
invoice_vals.sudo(purchase_user_id).purchase_order_change()
|
||||
invoice_vals.sudo(purchase_user_id)._onchange_partner_id()
|
||||
invoice_vals.date_invoice = str(datetime.today())
|
||||
invoice_vals.sudo(purchase_user_id)._onchange_payment_term_date_invoice()
|
||||
invoice_vals.sudo(purchase_user_id)._onchange_origin()
|
||||
invoice_vals.currency_id = record.currency_id
|
||||
|
||||
for line in invoice_vals.invoice_line_ids:
|
||||
line.quantity = line.purchase_line_id and line.purchase_line_id.product_qty or 0.0
|
||||
line.sudo(purchase_user_id)._compute_price()
|
||||
|
||||
vendor_bill_id = invoice_obj.sudo(purchase_user_id).with_context({'type':'in_invoice'}).create(invoice_vals._convert_to_write(invoice_vals._cache))
|
||||
vendor_bill_id.intercompany_transfer_id = self.id
|
||||
|
||||
if configuration_record.auto_validate_invoices:
|
||||
invoice_id.sudo(sale_user_id).action_invoice_open()
|
||||
vendor_bill_id.sudo(purchase_user_id).action_invoice_open()
|
||||
|
||||
record.write({'state':'processed', 'processed_date':datetime.today(), 'message':'ICT processed successfully by %s' % (self.env.user.name)})
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def check_user_validation(self):
|
||||
context = self._context or {}
|
||||
for record in self:
|
||||
if not record.source_warehouse_id.sudo().company_id.intercompany_user_id:
|
||||
msg = 'Please Specify Inter Company user for Source Company'
|
||||
if context.get('is_auto_validate', False):
|
||||
record.write({'message':msg})
|
||||
return False
|
||||
raise ValidationError(msg)
|
||||
|
||||
if not record.destination_warehouse_id.sudo().company_id.intercompany_user_id:
|
||||
msg = 'Please specify intercompany user for destination company'
|
||||
if context.get('is_auto_validate', False):
|
||||
record.write({'message':msg})
|
||||
return False
|
||||
raise ValidationError(msg)
|
||||
|
||||
if record.source_warehouse_id.sudo().company_id not in self.env.user.company_ids :
|
||||
if record.source_warehouse_id.sudo().company_id not in self.env.user.company_id.child_ids :
|
||||
msg = "User '%s' can not process this Inter Company Transfer.\n User from Source Warehouse Company can Process it !!!!\n\nPlease Process it with User of Source Warehouse Company." % (self.env.user.name)
|
||||
raise ValidationError(msg)
|
||||
return True
|
||||
|
||||
|
||||
def create_internal_transfer(self):
|
||||
picking_obj = self.env['stock.picking']
|
||||
procurementgroup_obj = self.env['procurement.group']
|
||||
stocklocation_route_obj = self.env['stock.location.route']
|
||||
|
||||
source_wh = self.source_warehouse_id
|
||||
dest_wh = self.destination_warehouse_id
|
||||
|
||||
group_id = procurementgroup_obj.create({'name': self.name, 'partner_id': dest_wh.partner_id.id})
|
||||
self.group_id = group_id.id
|
||||
route_ids = stocklocation_route_obj.search([('supplied_wh_id', '=', dest_wh.id), ('supplier_wh_id', '=', source_wh.id)])
|
||||
if not route_ids:
|
||||
raise ValidationError(_("No routes are found. \n Please configure warehouse routes and set in products."))
|
||||
if not self.intercompany_transferline_ids :
|
||||
raise ValidationError(_("No Products found. \n Please add products to transfer."))
|
||||
|
||||
for line in self.intercompany_transferline_ids:
|
||||
procurementgroup_obj.run(line.product_id, line.quantity, line.product_id.uom_id, dest_wh.lot_stock_id, self.name, False, values={'warehouse_id':dest_wh, 'route_ids':route_ids and route_ids[0], 'group_id':self.group_id})
|
||||
|
||||
|
||||
pickings = picking_obj.search([('group_id', '=', group_id.id)])
|
||||
if not pickings:
|
||||
if not group_id:
|
||||
raise Warning("Problem with creation of procurement group.")
|
||||
else:
|
||||
raise Warning("NO Pickings are created for this record.")
|
||||
for picking in pickings:
|
||||
if not picking.intercompany_transfer_id:
|
||||
picking.intercompany_transfer_id = self.id
|
||||
picking.action_assign()
|
||||
picking_id = picking.search([('location_id', '=', self.source_warehouse_id.lot_stock_id.id)])
|
||||
if picking_id:
|
||||
picking_id.action_assign()
|
||||
|
||||
return True
|
||||
|
||||
def auto_create_saleorder(self):
|
||||
sale_obj = self.env['sale.order']
|
||||
saleline_obj = self.env['sale.order.line']
|
||||
so_list = []
|
||||
|
||||
for record in self:
|
||||
source_company = record.source_company_id
|
||||
source_warehouse_id = record.source_warehouse_id
|
||||
intercompany_user = source_company.sudo().intercompany_user_id.id or False
|
||||
partner_id = record.destination_company_id.sudo().partner_id
|
||||
order_vals = sale_obj.sudo(intercompany_user).new({'partner_id':partner_id.id, 'warehouse_id':source_warehouse_id.id, 'pricelist_id':self.price_list_id.id})
|
||||
order_vals.sudo(intercompany_user).onchange_partner_id()
|
||||
order_vals.warehouse_id = source_warehouse_id.id
|
||||
order_vals.sudo(intercompany_user)._onchange_company_id()
|
||||
order_vals.fiscal_position_id = partner_id.sudo(intercompany_user).property_account_position_id.id
|
||||
order_vals.pricelist_id = self.price_list_id.id
|
||||
if record.crm_team_id:
|
||||
order_vals.team_id = record.crm_team_id.id
|
||||
order_vals = order_vals.sudo(intercompany_user)
|
||||
sale_order = sale_obj.sudo(intercompany_user).create(order_vals._convert_to_write(order_vals._cache))
|
||||
so_lines_list = []
|
||||
for line in record.intercompany_transferline_ids:
|
||||
line_vals = saleline_obj.sudo(intercompany_user).new({'order_id':sale_order.id, 'product_id':line.product_id})
|
||||
line_vals.sudo(intercompany_user).product_id_change()
|
||||
line_vals.sudo(intercompany_user).product_uom_qty = line.quantity
|
||||
line_vals.price_unit = line.price
|
||||
line_vals = line_vals.sudo(intercompany_user)._convert_to_write(line_vals._cache)
|
||||
so_lines_list.append((0, 0, line_vals))
|
||||
sale_order.sudo(intercompany_user).write({'order_line':so_lines_list, 'intercompany_transfer_id':record.id})
|
||||
so_list.append(sale_order)
|
||||
|
||||
return so_list
|
||||
|
||||
|
||||
def auto_create_purchaseorder(self):
|
||||
purchase_obj = self.env['purchase.order']
|
||||
purchase_line_obj = self.env['purchase.order.line']
|
||||
po_list = []
|
||||
for record in self:
|
||||
destination_company = record.destination_company_id
|
||||
intercompany_user = destination_company.sudo().intercompany_user_id.id or False
|
||||
print('intercompany_user$$$$$$$$$$$$$$$$$$$$$$',intercompany_user)
|
||||
order_vals = purchase_obj.sudo(intercompany_user).new({'currency_id':self.currency_id.id, 'partner_id':record.source_warehouse_id.sudo().company_id.partner_id.id, 'company_id':destination_company.id})
|
||||
order_vals.sudo(intercompany_user).onchange_partner_id()
|
||||
order_vals.currency_id = self.currency_id.id
|
||||
order_vals.picking_type_id = self.destination_warehouse_id.sudo().in_type_id
|
||||
purchase_order_id = purchase_obj.sudo(intercompany_user).create(order_vals.sudo(intercompany_user)._convert_to_write(order_vals._cache))
|
||||
po_lines_list = []
|
||||
for line in record.intercompany_transferline_ids:
|
||||
line_vals = purchase_line_obj.sudo(intercompany_user).new({'order_id':purchase_order_id.id, 'product_id':line.product_id, 'currency_id':self.currency_id})
|
||||
line_vals.sudo(intercompany_user).onchange_product_id()
|
||||
line_vals.product_qty = line.quantity
|
||||
line_vals.price_unit = line.price
|
||||
line_vals.product_uom = line.product_id.uom_id
|
||||
line_vals = line_vals.sudo(intercompany_user)._convert_to_write(line_vals._cache)
|
||||
po_lines_list.append((0, 0, line_vals))
|
||||
purchase_order_id.sudo(intercompany_user).write({'order_line':po_lines_list, 'intercompany_transfer_id':record.id})
|
||||
po_list.append(purchase_order_id)
|
||||
|
||||
return po_list
|
||||
|
||||
|
||||
def prepare_invoice_dict(self, record, purchase_partner_id, porder):
|
||||
vals = {'company_id': record.destination_company_id.id or False,
|
||||
'currency_id':record.currency_id,
|
||||
'partner_id':purchase_partner_id.id,
|
||||
'type': 'in_invoice',
|
||||
'journal_type': 'purchase',
|
||||
'purchase_id': porder.id}
|
||||
return vals
|
||||
|
||||
|
||||
def action_reverse_process(self):
|
||||
stockreturn_picking_obj = self.env['stock.return.picking']
|
||||
accountinvoice_refund_obj = self.env['account.invoice.refund']
|
||||
stock_move_obj = self.env['stock.move']
|
||||
stock_picking_obj = self.env['stock.picking']
|
||||
account_invoice_obj = self.env['account.move']
|
||||
|
||||
|
||||
picking_to_stock = []
|
||||
pickings = []
|
||||
internal_transfer = False
|
||||
if not self.intercompany_transferline_ids:
|
||||
raise Warning("There are no products in the record!!")
|
||||
|
||||
if not self.intercompany_transfer_id.saleorder_ids and not self.intercompany_transfer_id.purchaseorder_ids:
|
||||
pickings = self.intercompany_transfer_id.picking_ids
|
||||
if not pickings:
|
||||
raise ValidationError(_("There are no pikings available in %s " % self.intercompany_transfer_id.name))
|
||||
if not pickings.filtered(lambda pc : pc.state == 'done'):
|
||||
raise ValidationError(_("%s have some pickings which are not in done state yet!! \n Please done pickings befor reverse it. " % self.intercompany_transfer_id.name))
|
||||
internal_transfer = True
|
||||
|
||||
if internal_transfer:
|
||||
processed = False
|
||||
for picking in pickings:
|
||||
picking_to_stock = []
|
||||
for line in self.intercompany_transferline_ids:
|
||||
for move_id in stock_move_obj.search([('picking_id', '=', picking.id), ('product_id', '=', line.product_id.id), ('state', '=', 'done')]):
|
||||
line_tmp = (0, 0, {'product_id': move_id.product_id.id, 'move_id': move_id.id, 'quantity': line.quantity, 'to_refund': False})
|
||||
picking_to_stock.append(line_tmp)
|
||||
|
||||
default_vals = stockreturn_picking_obj.with_context({'active_id':picking.id}).default_get(['move_dest_exists', 'original_location_id', 'parent_location_id', 'location_id', 'product_return_moves'])
|
||||
default_vals.update({'product_return_moves':picking_to_stock})
|
||||
return_picking = stockreturn_picking_obj.with_context({'active_ids':[]}).create(default_vals)
|
||||
new_picking_ids = return_picking.with_context({'active_id':move_id.picking_id.id}).create_returns()
|
||||
stock_picking_lst = stock_picking_obj.browse(new_picking_ids.get('res_id'))
|
||||
if stock_picking_lst:
|
||||
for picking in stock_picking_lst:
|
||||
picking.intercompany_transfer_id = self.id
|
||||
processed = True
|
||||
if processed:
|
||||
self.write({'state':'processed'})
|
||||
return True
|
||||
return False
|
||||
|
||||
if self.intercompany_transfer_id.saleorder_ids:
|
||||
for sorder in self.intercompany_transfer_id.saleorder_ids:
|
||||
pickings += sorder.picking_ids and sorder.picking_ids.filtered(lambda picking : picking.picking_type_id.code == 'outgoing')
|
||||
if not pickings:
|
||||
raise ValidationError(_("No pickings are available in sale order"))
|
||||
|
||||
for picking in pickings:
|
||||
for line in self.intercompany_transferline_ids:
|
||||
for move_id in stock_move_obj.search([('picking_id', '=', picking.id), ('product_id', '=', line.product_id.id), ('state', '=', 'done')]):
|
||||
line_tmp = (0, 0, {'product_id': move_id.product_id.id, 'move_id': move_id.id, 'quantity': line.quantity, 'to_refund': False})
|
||||
picking_to_stock.append(line_tmp)
|
||||
|
||||
default_vals = stockreturn_picking_obj.with_context({'active_id':picking.id}).default_get(['move_dest_exists', 'original_location_id', 'parent_location_id', 'location_id', 'product_return_moves'])
|
||||
default_vals.update({'product_return_moves':picking_to_stock})
|
||||
return_picking = stockreturn_picking_obj.with_context({'active_id':picking.id}).create(default_vals)
|
||||
new_picking_id = return_picking.with_context({'active_id':picking.id}).create_returns()
|
||||
stock_picking_id = stock_picking_obj.browse(new_picking_id.get('res_id'))
|
||||
if stock_picking_id:
|
||||
stock_picking_id.intercompany_transfer_id = self.id
|
||||
|
||||
|
||||
|
||||
incoming_picking_stock_lst = []
|
||||
incoming_pickings_lst = []
|
||||
if self.intercompany_transfer_id.purchaseorder_ids:
|
||||
for porder in self.intercompany_transfer_id.purchaseorder_ids:
|
||||
incoming_pickings_lst += porder.picking_ids and porder.picking_ids.filtered(lambda pck : pck.picking_type_id.code == 'incoming')
|
||||
for incoming_picking in incoming_pickings_lst:
|
||||
for line in self.intercompany_transferline_ids:
|
||||
for move_id in stock_move_obj.search([('picking_id', '=', incoming_picking.id), ('product_id', '=', line.product_id.id), ('state', '=', 'done')]):
|
||||
line_tmp = (0, 0, {'product_id': move_id.product_id.id, 'move_id': move_id.id, 'quantity': line.quantity})
|
||||
incoming_picking_stock_lst.append(line_tmp)
|
||||
|
||||
default_incoming_vals = stockreturn_picking_obj.with_context({'active_id':incoming_picking.id}).default_get(['move_dest_exists', 'original_location_id', 'parent_location_id', 'location_id', 'product_return_moves'])
|
||||
default_incoming_vals.update({'product_return_moves':incoming_picking_stock_lst})
|
||||
return_picking = stockreturn_picking_obj.with_context({'active_ids':[]}).create(default_incoming_vals)
|
||||
new_picking_id = return_picking.with_context({'active_id':incoming_picking.id}).create_returns()
|
||||
stock_picking = self.env['stock.picking'].browse(new_picking_id.get('res_id'))
|
||||
|
||||
if stock_picking:
|
||||
stock_picking.intercompany_transfer_id = self.id
|
||||
|
||||
|
||||
for sorder in self.intercompany_transfer_id.saleorder_ids:
|
||||
for invoice in sorder.invoice_ids.filtered(lambda inv : inv.type == 'out_invoice'):
|
||||
customer_invoice_id = invoice.search([('refund_invoice_id', '=', invoice.id)], order='id desc' , limit=1)
|
||||
default_inovoice_vals = accountinvoice_refund_obj.with_context({'active_id':invoice.id}).default_get(['filter_refund', 'description', 'date_invoice', 'date'])
|
||||
configuration_record = self.env.ref('intercompany_transaction_ept.intercompany_transaction_config_record')
|
||||
if configuration_record.filter_refund:
|
||||
default_inovoice_vals['filter_refund'] = configuration_record.filter_refund
|
||||
default_inovoice_vals.update({'description':'%s' % (configuration_record and configuration_record.description or ('for %s' % self.name))})
|
||||
customer_refund = accountinvoice_refund_obj.with_context({'active_id':invoice.id}).create(default_inovoice_vals)
|
||||
if customer_refund.with_context({'active_ids':invoice.id}).invoice_refund():
|
||||
invoice_id = account_invoice_obj.search([('refund_invoice_id', '=', invoice.id)], order='id desc', limit=1)
|
||||
if invoice_id:
|
||||
invoice_id.intercompany_transfer_id = self.id
|
||||
for invoice_line in invoice_id.invoice_line_ids:
|
||||
match_line = self.intercompany_transferline_ids.filtered(lambda ln : ln.product_id.id == invoice_line.product_id.id)
|
||||
if match_line:
|
||||
invoice_line.quantity = match_line.quantity
|
||||
if invoice_id.state == "draft":
|
||||
invoice_id.with_context({'active_ids':invoice.id}).action_invoice_open()
|
||||
|
||||
|
||||
for porder in self.intercompany_transfer_id.purchaseorder_ids:
|
||||
for vendor_invoice in porder.invoice_ids.filtered(lambda inv : inv.type == 'in_invoice'):
|
||||
default_inovoice_vals = accountinvoice_refund_obj.with_context({'active_id':vendor_invoice.id}).default_get(['filter_refund', 'description', 'date_invoice', 'date'])
|
||||
configuration_record = self.env.ref('intercompany_transaction_ept.intercompany_transaction_config_record')
|
||||
if configuration_record.filter_refund:
|
||||
default_inovoice_vals['filter_refund'] = configuration_record.filter_refund
|
||||
default_inovoice_vals.update({'description':'%s' % (configuration_record and configuration_record.description or ('for %s' % self.name))})
|
||||
vendor_refund = accountinvoice_refund_obj.with_context({'active_id':vendor_invoice.id}).create(default_inovoice_vals)
|
||||
invoice_id = False
|
||||
if vendor_refund.with_context({'active_ids':vendor_invoice.id}).invoice_refund():
|
||||
invoice_id = account_invoice_obj.search([('refund_invoice_id', '=', vendor_invoice.id)], order='id desc', limit=1)
|
||||
if invoice_id:
|
||||
invoice_id.intercompany_transfer_id = self.id
|
||||
for invoice_line in invoice_id.invoice_line_ids:
|
||||
match_line = self.intercompany_transferline_ids.filtered(lambda ln : ln.product_id.id == invoice_line.product_id.id)
|
||||
if match_line:
|
||||
invoice_line.quantity = match_line.quantity
|
||||
if invoice_id.state == "draft":
|
||||
invoice_id.with_context({'active_ids':vendor_invoice.id}).action_invoice_open()
|
||||
|
||||
self.write({'state':'processed'})
|
||||
return True
|
||||
|
||||
|
||||
def action_create_reverse_process(self):
|
||||
reverse_ict_line_obj = self.env['reverse.inter.company.transfer.line.ept']
|
||||
created_reverse_ids = []
|
||||
|
||||
for line in self.intercompany_transferline_ids:
|
||||
if line.qty_delivered != 0.0:
|
||||
qty_delivered = line.qty_delivered
|
||||
if line.qty_delivered <= line.quantity:
|
||||
inter_company_transfer_ids = self.search([('intercompany_transfer_id', '=', self.id), ('type', '=', 'ict_reverse'), ('state', '!=', 'cancel')])
|
||||
if inter_company_transfer_ids:
|
||||
qty_delivered = 0.0
|
||||
total_qty_deliverd = 0.0
|
||||
if len(inter_company_transfer_ids) > 1:
|
||||
for inter_company_id in inter_company_transfer_ids:
|
||||
for transferline in inter_company_id.intercompany_transferline_ids:
|
||||
if transferline.product_id == line.product_id:
|
||||
total_qty_deliverd += transferline.quantity
|
||||
qty_delivered = line.qty_delivered - total_qty_deliverd
|
||||
if qty_delivered != 0.0 and qty_delivered > 0.0:
|
||||
created_reverse_ids.append(reverse_ict_line_obj.create({'product_id':line.product_id.id, 'quantity':qty_delivered , 'qty_delivered': qty_delivered, 'price' : line.price}).id)
|
||||
else:
|
||||
for already_line in inter_company_transfer_ids.intercompany_transferline_ids:
|
||||
if already_line.product_id == line.product_id:
|
||||
if already_line.quantity == line.quantity:
|
||||
continue
|
||||
elif already_line.quantity < line.quantity:
|
||||
qty_delivered = line.qty_delivered - already_line.quantity
|
||||
if qty_delivered != 0.0 and qty_delivered > 0.0:
|
||||
created_reverse_ids.append(reverse_ict_line_obj.create({'product_id':line.product_id.id, 'quantity':qty_delivered, 'qty_delivered': qty_delivered, 'price' : line.price}).id)
|
||||
else:
|
||||
created_reverse_ids.append(reverse_ict_line_obj.create({'product_id':line.product_id.id, 'quantity':qty_delivered , 'qty_delivered': qty_delivered, 'price' : line.price}).id)
|
||||
else:
|
||||
created_reverse_ids.append(reverse_ict_line_obj.create({'product_id':line.product_id.id, 'quantity':qty_delivered , 'qty_delivered': qty_delivered, 'price' : line.price}).id)
|
||||
else:
|
||||
continue
|
||||
if created_reverse_ids:
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'reverse.inter.company.transfer.ept',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form',
|
||||
'context' : {'default_intercompany_transfer_id':self.id, 'default_reverse_intercompanyline_ids':[(6, 0, created_reverse_ids)],
|
||||
'default_destination_warehouse':self.destination_warehouse_id and self.destination_warehouse_id.id or False},
|
||||
'target': 'new',
|
||||
|
||||
}
|
||||
else:
|
||||
raise Warning("There are no products found for the Reverse Transaction !!")
|
||||
|
||||
|
||||
def action_cancel(self):
|
||||
saleorder_ids = self.saleorder_ids.filtered(lambda so : so.state == 'draft')
|
||||
puchaseorder_ids = self.purchaseorder_ids.filtered(lambda po:po.state == 'draft')
|
||||
invoice_ids = self.invoice_ids.filtered(lambda inv: inv.state == 'draft')
|
||||
picking_ids = self.picking_ids.filtered(lambda pick:pick.state == 'draft')
|
||||
if self.state == 'processed':
|
||||
if saleorder_ids and puchaseorder_ids and invoice_ids and picking_ids:
|
||||
saleorder_ids.action_cancel()
|
||||
puchaseorder_ids.action_cancel()
|
||||
invoice_ids.action_cancel()
|
||||
picking_ids.action_cancel()
|
||||
self.reset_to_draft()
|
||||
else:
|
||||
raise Warning("You Can not Cancel Inter Company Transaction Which All Transaction State is Done")
|
||||
else:
|
||||
self.write({'state':'cancel', 'message' : 'ICT has been cancelled by %s' % (self.env.user.name) })
|
||||
|
||||
|
||||
|
||||
def reset_to_draft(self):
|
||||
self.ensure_one()
|
||||
self.state = 'draft'
|
||||
|
||||
|
||||
def unlink(self):
|
||||
picking_ids = [picking.state != 'done' for picking in self.picking_ids]
|
||||
if picking_ids and self.state == 'processed':
|
||||
raise Warning("You can not delete transaction, if it is in Processed state !!")
|
||||
res = super(InterCompanyTransfer, self).unlink()
|
||||
return res
|
||||
|
||||
|
||||
|
||||
def view_sale_order(self):
|
||||
form_id = self.env.ref('sale.view_order_form').id
|
||||
tree_id = self.env.ref('sale.view_order_tree').id
|
||||
resource_ids = self.saleorder_ids and self.saleorder_ids.ids or []
|
||||
action = {
|
||||
'name': 'Sale Order',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'res_model': 'sale.order',
|
||||
'domain':[('id', 'in', resource_ids)]
|
||||
}
|
||||
return self._open_form_tree_view(action, form_id, tree_id, resource_ids)
|
||||
|
||||
|
||||
def view_reverse_ict(self):
|
||||
form_id = self.env.ref('intercompany_transaction_ept.inter_company_transfer_ept_form_view').id
|
||||
tree_id = self.env.ref('intercompany_transaction_ept.inter_company_transfer_ept_tree_view').id
|
||||
resource_ids = self.reverse_intercompanytransfer_ids.ids
|
||||
action = {
|
||||
'name': 'Reverse ICT',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'res_model': 'inter.company.transfer.ept',
|
||||
'domain':[('id', 'in', resource_ids)]
|
||||
}
|
||||
return self._open_form_tree_view(action, form_id, tree_id, resource_ids)
|
||||
|
||||
|
||||
|
||||
def view_purchase_order(self):
|
||||
form_id = self.env.ref('purchase.purchase_order_form').id
|
||||
tree_id = self.env.ref('purchase.purchase_order_tree').id
|
||||
resource_ids = self.purchaseorder_ids and self.purchaseorder_ids.ids or []
|
||||
action = {
|
||||
'name': 'Purchase Order',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'purchase.order',
|
||||
'domain':[('id', 'in', resource_ids)]
|
||||
}
|
||||
return self._open_form_tree_view(action, form_id, tree_id, resource_ids)
|
||||
|
||||
|
||||
def view_pickings(self):
|
||||
form_id = self.env.ref('stock.view_picking_form').id
|
||||
tree_id = self.env.ref('stock.vpicktree').id
|
||||
resource_ids = self.picking_ids and self.picking_ids.ids or []
|
||||
action = {
|
||||
'name':_('Pickings'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'res_model': 'stock.picking',
|
||||
'domain':[('id', 'in', resource_ids)]
|
||||
}
|
||||
|
||||
return self._open_form_tree_view(action, form_id, tree_id, resource_ids)
|
||||
|
||||
|
||||
def view_invoice(self):
|
||||
tree_id = self.env.ref('account.invoice_tree').id
|
||||
form_id = self.env.ref('account.invoice_form').id
|
||||
resource_ids = self.env['account.move'].search([('intercompany_transfer_id', '=', self.id), ('type', '=', 'out_refund')]).ids or []
|
||||
action = {
|
||||
'name': _('Customer Invoice'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'res_model': 'account.move',
|
||||
'target':'current',
|
||||
'domain':[('id', 'in', resource_ids)]
|
||||
}
|
||||
return self._open_form_tree_view(action, form_id, tree_id, resource_ids)
|
||||
|
||||
|
||||
def view_vendor_bill(self):
|
||||
tree_id = self.env.ref('account.invoice_supplier_tree').id
|
||||
form_id = self.env.ref('account.invoice_supplier_form').id
|
||||
resource_ids = self.env['account.move'].search([('intercompany_transfer_id', '=', self.id), ('type', '=', 'in_refund')]).ids or []
|
||||
action = {
|
||||
'name': _('Vendor Bill'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'res_model': 'account.move',
|
||||
'target':'current',
|
||||
'domain':[('id', 'in', resource_ids)]
|
||||
}
|
||||
return self._open_form_tree_view(action, form_id, tree_id, resource_ids)
|
||||
|
||||
|
||||
|
||||
|
||||
def action_view_log(self):
|
||||
tree_id = self.env.ref('intercompany_transaction_ept.inter_company_transfer_process_log_tree_view').id
|
||||
form_id = self.env.ref('intercompany_transaction_ept.inter_company_transfer_process_log_form_view').id
|
||||
resource_ids = self.log_ids.ids
|
||||
action = {
|
||||
'name': 'ICT Log',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'res_model': 'inter.company.transfer.log.ept',
|
||||
'domain':[('id', 'in', resource_ids)]
|
||||
}
|
||||
return self._open_form_tree_view(action, form_id, tree_id, resource_ids)
|
||||
|
||||
|
||||
|
||||
def _open_form_tree_view(self, action, form_view_id, tree_view_id, resource_ids):
|
||||
if len(resource_ids) == 1 :
|
||||
action.update({'view_id':form_view_id,
|
||||
'res_id':resource_ids[0],
|
||||
'view_mode': 'form'})
|
||||
else :
|
||||
action.update({'view_id':False,
|
||||
'view_mode': 'tree,form',
|
||||
'views': [(tree_view_id, 'tree'), (form_view_id, 'form')]})
|
||||
|
||||
return action
|
||||
|
||||
def import_export_product_list_view(self):
|
||||
form_id = self.env.ref('intercompany_transaction_ept.import_export_product_list_ept_form_view').id
|
||||
ctx = self._context.copy() or {}
|
||||
ctx.update({'record':self.id or False})
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form',
|
||||
'res_model': 'import.export.product.list.ept',
|
||||
'views': [(form_id, 'form')],
|
||||
'view_id': form_id,
|
||||
'target': 'new',
|
||||
'context': ctx,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
from datetime import datetime
|
||||
from odoo.addons import decimal_precision as dp
|
||||
|
||||
|
||||
|
||||
class InterCompanyTransferLine(models.Model):
|
||||
|
||||
_name = "inter.company.transfer.line.ept"
|
||||
_description = "Internal Company Transfer Line"
|
||||
|
||||
|
||||
@api.depends( 'inter_transfer_id.picking_ids.state')
|
||||
def _get_delivered_qty(self):
|
||||
for line in self:
|
||||
if line.inter_transfer_id.state in ['processed']:
|
||||
qty_delivered = 0.0
|
||||
for picking_id in line.inter_transfer_id.picking_ids:
|
||||
if picking_id.state != 'cancel':
|
||||
for move_line in picking_id.move_ids_without_package:
|
||||
if line.product_id == move_line.product_id:
|
||||
if picking_id.picking_type_id.code == 'incoming':
|
||||
qty_delivered += move_line.product_id.uom_id._compute_quantity(move_line.quantity_done, move_line.product_id.uom_id)
|
||||
line.qty_delivered = qty_delivered
|
||||
else:
|
||||
line.qty_delivered = 0.0
|
||||
|
||||
|
||||
quantity = fields.Float(string="Quantity", default=1.0)
|
||||
qty_delivered = fields.Float(compute='_get_delivered_qty', string='Delivered Quantity', store=True, readonly=True, digits=dp.get_precision('Product Unit of Measure'))
|
||||
price = fields.Float(string='Price')
|
||||
product_id = fields.Many2one('product.product', string='Product')
|
||||
inter_transfer_id = fields.Many2one('inter.company.transfer.ept')
|
||||
|
||||
|
||||
@api.onchange('product_id', 'inter_transfer_id')
|
||||
def default_price_get(self):
|
||||
"""
|
||||
Get the Product Price
|
||||
"""
|
||||
for record in self:
|
||||
product_id = record.product_id
|
||||
if product_id:
|
||||
pricelist_id = record.inter_transfer_id.price_list_id
|
||||
if pricelist_id:
|
||||
record.price = pricelist_id.price_get(product_id.id, record.quantity)[pricelist_id.id]
|
||||
else:
|
||||
record.price = record.product_id.lst_price
|
||||
else:
|
||||
record.price = 0.0
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
from datetime import datetime
|
||||
import datetime
|
||||
|
||||
module_name = [('inter.company.transfer.ept', 'Inter Company Transfer')]
|
||||
|
||||
class InterCompanyTransferLog(models.Model):
|
||||
_name = 'inter.company.transfer.log.ept'
|
||||
_description = 'Inter company Transfer Log Process'
|
||||
|
||||
|
||||
name = fields.Char(string="Name")
|
||||
ict_log_date = fields.Datetime(string="Log Date")
|
||||
ict_process = fields.Selection(module_name, string="Application")
|
||||
ict_operation = fields.Selection([('import', 'Import')], string="Operation")
|
||||
intercompany_transfer_id = fields.Many2one('inter.company.transfer.ept', string="Inter company Transfer ID")
|
||||
|
||||
ict_log_line_ids = fields.One2many('inter.company.transfer.log.line.ept', 'ict_log_id')
|
||||
|
||||
def return_log_record(self, model_name, operation_type):
|
||||
sequence_id = self.env.ref('intercompany_transaction_ept.inter_company_process_log_seq').ids
|
||||
if sequence_id:
|
||||
record_name = self.env['ir.sequence'].browse(sequence_id).next_by_id()
|
||||
else:
|
||||
record_name = '/'
|
||||
log_vals = {
|
||||
'name' : record_name,
|
||||
'ict_log_date': datetime.datetime.now(),
|
||||
'ict_process':model_name._name,
|
||||
'ict_operation':operation_type,
|
||||
'intercompany_transfer_id':model_name.id
|
||||
}
|
||||
log_record = self.create(log_vals)
|
||||
|
||||
return log_record
|
||||
|
||||
def post_log_line(self, message , type='error'):
|
||||
self.ensure_one()
|
||||
intercompany_transfer_logline_obj = self.env['inter.company.transfer.log.line.ept']
|
||||
log_line_vals = {
|
||||
'ict_message':message,
|
||||
'ict_log_type': type,
|
||||
'ict_log_id': self.id,
|
||||
}
|
||||
log_line_id = intercompany_transfer_logline_obj.create(log_line_vals)
|
||||
return log_line_id
|
||||
|
||||
|
||||
class InterCompanyTransferLogLine(models.Model):
|
||||
|
||||
_name = "inter.company.transfer.log.line.ept"
|
||||
_description = 'Inter company Transfer Log Line Process'
|
||||
_rec_name = "ict_log_id"
|
||||
|
||||
ict_message = fields.Text(string="Message")
|
||||
ict_log_type = fields.Selection([('error', 'Error'), ('mismatch', 'Mismatch'), ('info', 'Info')], string="Log Type")
|
||||
ict_log_id = fields.Many2one('inter.company.transfer.log.ept', string="ICT Process Log", ondelete='cascade')
|
||||
|
||||
7
intercompany_transaction_ept/models/purchase.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from odoo import fields, api, models , _
|
||||
|
||||
class PurchaseOrder(models.Model):
|
||||
_inherit = 'purchase.order'
|
||||
_description = 'Purchase Order'
|
||||
|
||||
intercompany_transfer_id = fields.Many2one('inter.company.transfer.ept', string="ICT", copy=False)
|
||||
9
intercompany_transaction_ept/models/res_company.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from odoo import fields, models
|
||||
|
||||
class ResCompany(models.Model):
|
||||
_inherit = "res.company"
|
||||
_description = 'Res Company'
|
||||
|
||||
intercompany_user_id = fields.Many2one('res.users', string="Intercompany User")
|
||||
sale_journal = fields.Many2one('account.journal', string="Sale Journal")
|
||||
purchase_journal = fields.Many2one('account.journal', string="Purchase Journal")
|
||||
21
intercompany_transaction_ept/models/sale.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from odoo import api, fields, models, _
|
||||
|
||||
class SaleOrder(models.Model):
|
||||
_inherit = 'sale.order'
|
||||
_description = 'Sale Order'
|
||||
|
||||
intercompany_transfer_id = fields.Many2one('inter.company.transfer.ept', string="ICT", copy=False)
|
||||
|
||||
|
||||
"""
|
||||
This Method is used to invoice journal issue when it is creating time(as breadcrumb)
|
||||
"""
|
||||
|
||||
def _prepare_invoice(self):
|
||||
if self.intercompany_transfer_id:
|
||||
journal_id = self.env['account.invoice'].default_get(['journal_id'])['journal_id']
|
||||
vals = super(SaleOrder, self.with_context({'journal_id':journal_id}))._prepare_invoice()
|
||||
return vals
|
||||
else:
|
||||
vals = super(SaleOrder, self)._prepare_invoice()
|
||||
return vals
|
||||
24
intercompany_transaction_ept/models/stock_picking.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from odoo import fields, api, models, _
|
||||
|
||||
class Picking(models.Model):
|
||||
_inherit = 'stock.picking'
|
||||
_description = 'Stock Picking'
|
||||
|
||||
intercompany_transfer_id = fields.Many2one('inter.company.transfer.ept', string="ICT", copy=False)
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
res = super(Picking, self).create(vals)
|
||||
order_id = self.env['sale.order'].search([('name', '=', res.origin)])
|
||||
if not order_id:
|
||||
order_id = self.env['purchase.order'].search([('name', '=', res.origin)])
|
||||
if order_id and order_id.intercompany_transfer_id:
|
||||
res.intercompany_transfer_id = order_id.intercompany_transfer_id.id
|
||||
return res
|
||||
|
||||
def _create_backorder(self):
|
||||
res = super(Picking, self)._create_backorder()
|
||||
for backorder in res:
|
||||
if backorder.backorder_id and backorder.backorder_id.intercompany_transfer_id:
|
||||
backorder.write({"intercompany_transfer_id":backorder.backorder_id.intercompany_transfer_id.id})
|
||||
return res
|
||||
1
intercompany_transaction_ept/report/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import sale_report
|
||||
17
intercompany_transaction_ept/report/sale_report.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from odoo import models,fields
|
||||
|
||||
class SaleReport(models.Model):
|
||||
_inherit = "sale.report"
|
||||
|
||||
intercompany_transfer_id = fields.Many2one('inter.company.transfer.ept', string="ICT", copy=False)
|
||||
|
||||
def _select(self):
|
||||
qry = super(SaleReport,self)._select()
|
||||
|
||||
qry += ', s.intercompany_transfer_id as intercompany_transfer_id '
|
||||
return qry
|
||||
|
||||
def _group_by(self):
|
||||
qry = super(SaleReport,self)._group_by()
|
||||
qry += ', s.intercompany_transfer_id '
|
||||
return qry
|
||||
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="0">
|
||||
<record id="module_intercompany_transaction_ept" model="ir.module.category">
|
||||
<field name="name">Inter Company Transfer</field>
|
||||
<field name="description">Inter Company Transfer User Access Rights</field>
|
||||
<field name="sequence">100</field>
|
||||
</record>
|
||||
|
||||
<record id="intercompany_transfer_user_group" model="res.groups">
|
||||
<field name="name">Inter Company Transfer User</field>
|
||||
<field name="category_id" ref="module_intercompany_transaction_ept" />
|
||||
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
|
||||
<field name="implied_ids" eval="[(4,ref('sales_team.group_sale_salesman_all_leads')),(4, ref('purchase.group_purchase_user')),(4, ref('stock.group_stock_user'))]"/>
|
||||
<field name="menu_access" eval="[(4, ref('inter_company_transfer_ept_main_menu')),(4, ref('inter_company_transfer_ept_child_menu'))]" />
|
||||
|
||||
</record>
|
||||
|
||||
<record id="intercompany_transfer_manager_group" model="res.groups">
|
||||
<field name="name">Inter Company Transfer Manager</field>
|
||||
<field name="category_id" ref="module_intercompany_transaction_ept" />
|
||||
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
|
||||
<field name="implied_ids" eval="[(4, ref('sales_team.group_sale_manager')),(4, ref('purchase.group_purchase_user')),(4, ref('stock.group_stock_manager')),(4,ref('intercompany_transaction_ept.intercompany_transfer_user_group'))]"/>
|
||||
<field name="menu_access" eval="[(4, ref('inter_company_transfer_ept_main_menu')),(4, ref('inter_company_transfer_ept_child_menu')),(4, ref('internal_inter_company_transfer_config_ept_menu'))]" />
|
||||
|
||||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="inter_company_transfer_ept_multi_company_record_rule" model="ir.rule">
|
||||
<field name="name">Inter Company Transfer Multi Company</field>
|
||||
<field name="model_id" ref="intercompany_transaction_ept.model_inter_company_transfer_ept" />
|
||||
<field name="domain_force">['|', ('source_warehouse_id', '=', False),'|',('destination_warehouse_id','=',False), '|',('source_warehouse_id.company_id','=',False),'|',('source_warehouse_id.company_id','child_of',[user.company_id.id]),'|',('destination_warehouse_id.company_id','=',False),('destination_warehouse_id.company_id','child_of',[user.company_id.id])]</field>
|
||||
<field name="perm_read" eval="True" />
|
||||
<field name="perm_write" eval="True" />
|
||||
<field name="perm_create" eval="True" />
|
||||
<field name="perm_unlink" eval="True" />
|
||||
</record>
|
||||
|
||||
<record id="inter_company_transfer_ept_log_record_rule" model="ir.rule">
|
||||
<field name="name">Inter Company Transfer Log</field>
|
||||
<field name="model_id" ref="intercompany_transaction_ept.model_inter_company_transfer_log_ept" />
|
||||
<field name="domain_force">['|', ('intercompany_transfer_id', '=',False),'|',('intercompany_transfer_id.source_warehouse_id', '=',False),'|',('intercompany_transfer_id.destination_warehouse_id','=',False), '|',('intercompany_transfer_id.source_warehouse_id.company_id','=',False),'|',('intercompany_transfer_id.source_warehouse_id.company_id','child_of',[user.company_id.id]),'|',('intercompany_transfer_id.destination_warehouse_id.company_id','=',False),('intercompany_transfer_id.destination_warehouse_id.company_id','child_of',[user.company_id.id])]</field>
|
||||
<field name="perm_read" eval="True" />
|
||||
<field name="perm_write" eval="True" />
|
||||
<field name="perm_create" eval="True" />
|
||||
<field name="perm_unlink" eval="True" />
|
||||
</record>
|
||||
|
||||
<record id="inter_company_transfer_ept_warehouse_multi_company_record_rule" model="ir.rule">
|
||||
<field name="name">Inter Company Transfer Warehouse Multi Company All Allow Company</field>
|
||||
<field name="model_id" ref="stock.model_stock_warehouse"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',user.company_ids and user.company_ids.ids or [user.company_id.id])]</field>
|
||||
<field name="groups" eval="[(4, ref('intercompany_transaction_ept.intercompany_transfer_user_group'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="inter_company_transfer_ept_location_multi_company_record_rule" model="ir.rule">
|
||||
<field name="name">Inter Company Transfer Location Multi Company All Allow Company</field>
|
||||
<field name="model_id" ref="stock.model_stock_location"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',user.company_ids and user.company_ids.ids or [user.company_id.id])]</field>
|
||||
<field name="groups" eval="[(4, ref('intercompany_transaction_ept.intercompany_transfer_user_group'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record id="inter_company_transfer_ept_stock_picking_type_multi_company_record_rule" model="ir.rule">
|
||||
<field name="name">Inter Company Transfer Stock Operation Type multi-company all</field>
|
||||
<field name="model_id" ref="stock.model_stock_picking_type"/>
|
||||
<field name="domain_force">['|', ('warehouse_id', '=', False), '|',('warehouse_id.company_id','=',False),('warehouse_id.company_id','child_of',user.company_ids and user.company_ids.ids or [user.company_id.id])]</field>
|
||||
<field name="groups" eval="[(4, ref('intercompany_transaction_ept.intercompany_transfer_user_group'))]"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_unlink" eval="False"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
13
intercompany_transaction_ept/security/ir.model.access.csv
Normal file
@@ -0,0 +1,13 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_inter_company_transfer_ept_manager,inter.company.transfer.ept.manager,model_inter_company_transfer_ept,intercompany_transfer_manager_group,1,1,1,1
|
||||
access_inter_company_transfer_ept_user,inter.company.transfer.ept.user,model_inter_company_transfer_ept,intercompany_transfer_user_group,1,1,1,0
|
||||
access_inter_company_transfer_line_ept_manager,inter.company.transfer.line.ept.manager,model_inter_company_transfer_line_ept,intercompany_transfer_manager_group,1,1,1,1
|
||||
access_inter_company_transfer_line_ept_user,inter.company.transfer.line.ept.user,model_inter_company_transfer_line_ept,intercompany_transfer_user_group,1,1,1,0
|
||||
access_inter_company_config_ept_manager,inter.company.config.ept.manager,model_inter_company_transfer_config_ept,intercompany_transfer_manager_group,1,1,1,1
|
||||
access_inter_company_config_ept_user,inter.company.config.ept.user,model_inter_company_transfer_config_ept,intercompany_transfer_user_group,1,1,1,0
|
||||
access_sale_advance_payment_inv_manager,sale.advance.payment.inv.manager,sale.model_sale_advance_payment_inv,intercompany_transfer_manager_group,1,1,1,1
|
||||
access_sale_advance_payment_inv_user,sale.advance.payment.inv.user,sale.model_sale_advance_payment_inv,intercompany_transfer_user_group,1,1,1,0
|
||||
access_inter_company_transfer_process_log_manager,Inter.company.transfer.process.log.manager,model_inter_company_transfer_log_ept,intercompany_transfer_manager_group,1,1,1,1
|
||||
access_inter_company_transfer_process_log_user,Inter.company.transfer.process.log.user,model_inter_company_transfer_log_ept,intercompany_transfer_user_group,1,1,1,0
|
||||
access_inter_company_transfer_process_log_line_manager,Inter.company.transfer.process.log.line.manager,model_inter_company_transfer_log_line_ept,intercompany_transfer_manager_group,1,1,1,1
|
||||
access_inter_company_transfer_process_log_line_user,Inter.company.transfer.process.log.line.user,model_inter_company_transfer_log_line_ept,intercompany_transfer_user_group,1,1,1,0
|
||||
|
@@ -0,0 +1,4 @@
|
||||
Default Code,Qty,Price
|
||||
2030020100075,5,400
|
||||
2030015000007,4,500
|
||||
2030030100003,8,2000
|
||||
|
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 24 KiB |
38
intercompany_transaction_ept/static/description/README.rst
Normal file
@@ -0,0 +1,38 @@
|
||||
=================================================
|
||||
Inter Company Transfer and Warehouse Transfer
|
||||
=================================================
|
||||
|
||||
With the help of this App one can manage multi company inter transfer & Internal Transfer. Local and consolidated reporting along with documents can be automatically managed with simple configuration using our App.
|
||||
|
||||
|
||||
=================================================
|
||||
Inter Company Transfer
|
||||
=================================================
|
||||
Creates Sales Order from source warehouse & Purchase Order in destination warehouse if warehouses belongs to different companies.
|
||||
Control over Invoice numbering / Refund numbering by specifying separate journals company wise.
|
||||
System will allow you to control pricing from the same screen. Same price will apply on sales order of source company and purchase order of destination company.
|
||||
An option to reverse entire / partial transactions with all effects. In case of Reverse intercompany transactions system will create reverse of delivery order, reverse of incoming shipment (only if they are done), debit note and credit note.
|
||||
Control over all documents process like automatic workflow of all documents, whether need to create or not, auto confirm or not, auto validate or not. Like one can control Auto confirm Sales Orders/ Purchase Order or Generate & Validate Invoice and Cancel: create credit note and reconcile.
|
||||
In multi company environment it’s not easy to create documents of multi companies without login to that company, with this app user can create all records related to intercompany transactions by just one click without login to that company, for that just need to set intercompany user company wise. So you can be sure that taxes applied on SO & PO are accurate according to the companies.
|
||||
|
||||
|
||||
=================================================
|
||||
Inter Warehouse Transfer (Internal Transfer)
|
||||
=================================================
|
||||
Creates Delivery Order in source warehouse & Receipts in Destination warehouse.
|
||||
Smart buttons to view created Delivery Order & Receipt.
|
||||
Allows users to do reverse transfer from the same screen. It will reverse the delivery order & receipt.
|
||||
|
||||
|
||||
============
|
||||
Similar Apps
|
||||
============
|
||||
Automated Sales Order Processing
|
||||
Website RMA ( Return Merchandise Authorization ) in Odoo
|
||||
All in One Inventory Reports
|
||||
All in One Solution for Amazon Seller
|
||||
Product Profitability Report
|
||||
Dropshipper EDI Integration in Odoo
|
||||
CRM Lead Age & Lead Age Breakdown Report
|
||||
RMA ( Return Merchandise Authorisation ) in Odoo
|
||||
Stock level indicator in Sales Quotation
|
||||
BIN
intercompany_transaction_ept/static/description/Redirect.png
Normal file
|
After Width: | Height: | Size: 518 B |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
BIN
intercompany_transaction_ept/static/description/Video.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 26 KiB |
BIN
intercompany_transaction_ept/static/description/emipro_logo.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
BIN
intercompany_transaction_ept/static/description/icon.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
740
intercompany_transaction_ept/static/description/index.html
Normal file
@@ -0,0 +1,740 @@
|
||||
<section class="oe_container">
|
||||
<div class="row mt92 o_equal_col_sm">
|
||||
<div class="" style="display:block;margin:0 auto;width: 500px;">
|
||||
<div style="display: inline-block;width: 240px;">
|
||||
<a href="https://www.emiprotechnologies.com" target="_blank" style="width: 100%;display: inline-block;">
|
||||
<img class="img img-responsive mt16" src="emipro_logo.png" style="display: block;margin: 0 auto;"/>
|
||||
</a>
|
||||
</div>
|
||||
<div style="width: 2px;height: 105px;background-image: -webkit-linear-gradient(transparent, #dce2e6, transparent);display: inline-block;vertical-align: top;"></div>
|
||||
<div style="display: inline-block;width: 240px;">
|
||||
<a href="https://www.emiprotechnologies.com/odoo-partner" target="_blank" style="width: 100%;display: inline-block;">
|
||||
<img class="img img-responsive mt16" src="ept_odoo_partner.png" style="margin: 0 auto;display: block;"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container">
|
||||
<div class="mt64 mb64 pt32">
|
||||
|
||||
<h2 class="oe_slogan" style="color: #091E42;font-family: Roboto;font-weight: 500;text-align:center;text-transform: uppercase;">
|
||||
Inter Company Transfer and Warehouse Transfer
|
||||
</h2>
|
||||
<p class="mb16 text-center text-black-dark" style="font-family: Roboto;font-weight: initial;color: #091E42;text-align:center;">
|
||||
The main purpose behind developing this app is to manage the product transfer between multiple companies and warehouses managed under the same roof. With auto document generation facility, the transfer operations are handled effectively within companies or partners. With this app, you can now track your stock more effectively while fulfilling the demands.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container">
|
||||
<div class="oe_row mt96 mb96" style="width: 420px;">
|
||||
<a href="https://www.emiprotechnologies.com/free-trial?app=intercompany-transaction-ept&version=12&edition=enterprise" target="_blank">
|
||||
<h3 class="contct_us_btn" style="padding: 18px;letter-spacing: 0.6px;background: linear-gradient(to right, #083FDA, #087DDA);text-align: center;box-shadow: 2px 1px 12px 3px #ece6e6;border-radius: 10px;color: #fff;font-family: "Montserrat";font-weight: 600;text-transform: uppercase;">Request a Free Demo</h3>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container">
|
||||
<div class="mt64 mb64">
|
||||
<h2 style="color: #091E42;font-family: "Montserrat";text-align: center;margin: 25px auto;text-transform: uppercase;"
|
||||
class="oe_slogan">
|
||||
<b>Highlights</b>
|
||||
</h2>
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12 mt32">
|
||||
<div class="container"
|
||||
style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;padding: 10px 0px;">
|
||||
<div class="col-md-3" style="float: left;">
|
||||
<img class="img img-responsive" src="Easy-Interface-to-Exchange-Stock.png"/>
|
||||
</div>
|
||||
<div class="col-md-9" style="padding-left:0;float: left;width: 70%;">
|
||||
<h3 class="mt16 mb0" style="font-family: Roboto;font-weight: 500;font-size: 22px;">Easy Interface to Exchange Stock</h3>
|
||||
<p class=" mt8" style="font-family: Roboto;">
|
||||
Superior user experience to carry out exchange of stock between companies/warehouses.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12 mt32">
|
||||
<div class="container"
|
||||
style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;padding: 10px 0px;">
|
||||
<div class="col-md-3" style="float: left;">
|
||||
<img class="img img-responsive" src="Easy-Interface-to-Return-Stock.png"/>
|
||||
</div>
|
||||
<div class="col-md-9" style="padding-left:0;float: left;width: 70%;">
|
||||
<h3 class="mt16 mb0" style="font-family: Roboto;font-weight: 500;font-size: 22px;">Easy Interface to Return Stock</h3>
|
||||
<p class=" mt8" style="font-family: Roboto;">
|
||||
Return the stock to source companies/warehouses with uncomplicated interface.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12 mt32">
|
||||
<div class="container"
|
||||
style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;padding: 10px 0px;">
|
||||
<div class="col-md-3" style="float: left;">
|
||||
<img class="img img-responsive" src="Automatic-Documents-Creation.png"/>
|
||||
</div>
|
||||
<div class="col-md-9" style="padding-left:0;float: left;width: 70%;">
|
||||
<h3 class="mt16 mb0" style="font-family: Roboto;font-weight: 500;font-size: 22px;">Automatic Documents Creation</h3>
|
||||
<p class=" mt8" style="font-family: Roboto;">
|
||||
Documents are automatically generated after each transfers in your Odoo as a part of confirmation receipt.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12 mt32">
|
||||
<div class="container"
|
||||
style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;padding: 10px 0px;">
|
||||
<div class="col-md-3" style="float: left;">
|
||||
<img class="img img-responsive" src="Easy-Navigation-between-created-document.png"/>
|
||||
</div>
|
||||
<div class="col-md-9" style="padding-left:0;float: left;width: 70%;">
|
||||
<h3 class="mt16 mb0" style="font-family: Roboto;font-weight: 500;font-size: 22px;">Easy Navigation between created Documents</h3>
|
||||
<p class=" mt8" style="font-family: Roboto;">
|
||||
Switch over to different documents without making effort to find them from large Odoo database.<br/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12 mt32">
|
||||
<div class="container"
|
||||
style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;padding: 10px 0px;">
|
||||
<div class="col-md-3" style="float: left;">
|
||||
<img class="img img-responsive" src="Control-over-pricing-and-invoicing.png"/>
|
||||
</div>
|
||||
<div class="col-md-9" style="padding-left:0;float: left;width: 70%;">
|
||||
<h3 class="mt16 mb0" style="font-family: Roboto;font-weight: 500;font-size: 22px;">Control over pricing and invoicing</h3>
|
||||
<p class=" mt8" style="font-family: Roboto;">
|
||||
Take the full command over managing prices & invoices for various types of transfers.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12 mt32">
|
||||
<div class="container"
|
||||
style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;padding: 10px 0px;">
|
||||
<div class="col-md-3" style="float: left;">
|
||||
<img class="img img-responsive" src="Automatic-Workflow.png"/>
|
||||
</div>
|
||||
<div class="col-md-9" style="padding-left:0;float: left;width: 70%;">
|
||||
<h3 class="mt16 mb0" style="font-family: Roboto;font-weight: 500;font-size: 22px;">Automatic Workflow</h3>
|
||||
<p class=" mt8" style="font-family: Roboto;">
|
||||
A higher-level way to organize tasks by automating its operations & minimize manual interventions.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container">
|
||||
<div id="loempia_tabs" class="" style="padding:64px 0px;margin: 100px 0px;background-color:#F0F4F7;">
|
||||
<ul role="tablist" class="nav nav-tabs justify-content-center" data-tabs="tabs" style="border: none;background: unset;">
|
||||
<li class="nav-item" style="border-top-right-radius: 6px;border-top-left-radius: 6px;background: linear-gradient(to top, #FF9B31, #ffdd2c);margin-right: 1px;padding-bottom: 2px;">
|
||||
<a href="#ept_features" data-toggle="tab" aria-expanded="true" class="active show" style="font-family: Roboto;text-transform: uppercase;font-weight: 600;font-size: 15px;letter-spacing: 1px;padding: 10px 20px;border-top-left-radius: 5px;border-top-right-radius: 5px;color: #2b2b2b;">Features
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item" style="border-top-right-radius: 6px;border-top-left-radius: 6px;background: linear-gradient(to top, #FF9B31, #ffdd2c);margin-right: 1px;padding-bottom: 2px;">
|
||||
<a href="#ept_screenshots" data-toggle="tab" aria-expanded="true" class="" style="font-family: Roboto;text-transform: uppercase;font-weight: 600;font-size: 15px;letter-spacing: 1px;padding: 10px 20px;border-top-left-radius: 5px;border-top-right-radius: 5px;color: #2b2b2b;">Screenshots
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item" style="border-top-right-radius: 6px;border-top-left-radius: 6px;background: linear-gradient(to top, #FF9B31, #ffdd2c);margin-right: 1px;padding-bottom: 2px;">
|
||||
<a href="#ept_userguid" data-toggle="tab" aria-expanded="true" class="" style="font-family: Roboto;text-transform: uppercase;font-weight: 600;font-size: 15px;letter-spacing: 1px;padding: 10px 20px;border-top-left-radius: 5px;border-top-right-radius: 5px;color: #2b2b2b;">User Guide
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item" style="border-top-right-radius: 6px;border-top-left-radius: 6px;background: linear-gradient(to top, #FF9B31, #ffdd2c);margin-right: 1px;padding-bottom: 2px;">
|
||||
<a href="#ept_faqs" data-toggle="tab" aria-expanded="true" class="" style="font-family: Roboto;text-transform: uppercase;font-weight: 600;font-size: 15px;letter-spacing: 1px;padding: 10px 20px;border-top-left-radius: 5px;border-top-right-radius: 5px;color: #2b2b2b;">FAQs
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="loempia_tabs_content_ept" class="tab-content" style="background: #fff;border-radius: 10px;padding: 2%;margin: 0% 2%;padding-top:4%;">
|
||||
<!-- Features Tabs -->
|
||||
<div class="tab-pane active show" id="ept_features">
|
||||
<div class="container">
|
||||
<section id="other-legal-references">
|
||||
<h3 class="text-center alert" style="font-family: Roboto;font-weight:500;color: #091E42;background: #F0F4F7;border-radius: 10px;">Inter Company Transfer</h3>
|
||||
<ul><li class="mb8" style="font-family: Roboto;color:#091E42;list-style-type: square;">Creates Sales Order from source warehouse & Purchase Order in destination warehouse if warehouses belongs to different companies.</li>
|
||||
<li class="mb8" style="font-family: Roboto;color:#091E42;list-style-type: square;">Control over Invoice numbering / Refund numbering by specifying separate journals company wise.</li>
|
||||
<li class="mb8" style="font-family: Roboto;color:#091E42;list-style-type: square;"> System will allow you to control pricing from the same screen. Same price will apply on sales order of source company and purchase order of destination company.</li>
|
||||
<li class="mb8" style="font-family: Roboto;color:#091E42;list-style-type: square;">An option to reverse entire / partial transactions with all effects. In case of Reverse intercompany transactions system will create reverse of delivery order, reverse of incoming shipment (only if they are done), debit note and credit note.</li>
|
||||
<li class="mb8" style="font-family: Roboto;color:#091E42;list-style-type: square;">Control over all documents process like automatic workflow of all documents, whether need to create or not, auto confirm or not, auto validate or not. Like one can control Auto confirm Sales Orders/ Purchase Order or Generate & Validate Invoice and Cancel: create credit note and reconcile.</li>
|
||||
<li class="mb8" style="font-family: Roboto;color:#091E42;list-style-type: square;">In multi company environment it’s not easy to create documents of multi companies without login to that company, with this app user can create all records related to intercompany transactions by just one click without login to that company, for that just need to set intercompany user company wise. So you can be sure that taxes applied on SO & PO are accurate according to the companies.</li>
|
||||
</ul><h3 class="text-center alert" style="font-family: Roboto;font-weight:500;color: #091E42;background: #F0F4F7;border-radius: 10px;">Inter Warehouse Transfer (Internal Transfer)</h3>
|
||||
<ul><li class="mb8" style="font-family: Roboto;color:#091E42;list-style-type: square;">Creates Delivery Order in source warehouse & Receipts in Destination warehouse.</li>
|
||||
<li class="mb8" style="font-family: Roboto;color:#091E42;list-style-type: square;">Smart buttons to view created Delivery Order & Receipt.</li>
|
||||
<li class="mb8" style="font-family: Roboto;color:#091E42;list-style-type: square;">Allows users to do reverse transfer from the same screen. It will reverse the delivery order & receipt.</li>
|
||||
</ul></section>
|
||||
<section class="oe_container mt64">
|
||||
<div class="mb64">
|
||||
<h3 class="text-center alert" style="font-family: Roboto;font-weight:500;color: #091E42;background: #F0F4F7;border-radius: 10px;">Imaginary Flow of Inter Company Transfer</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="Inter-Company-Transfer.png" class="img img-responsive center-block" style="max-width:80%;"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb64">
|
||||
<h3 class="text-center alert" style="font-family: Roboto;font-weight:500;color: #091E42;background: #F0F4F7;border-radius: 10px;">Imaginary Flow of Inter Warehouse Transfer</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="inter-Warehouse-Transfer-(Intra-company-transfer).png" class="img img-responsive center-block" style="max-width:80%;"/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="ept_screenshots">
|
||||
<section class="oe_container">
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Set user rights for ICT User</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/1(1-1).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Basic ICT Configuration for Company</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/2(2-2).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Configure Resupply Warehouse for ICT Transactions</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/3 (3-3).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Product Configuration for its ICT operations</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/4(4-4).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Inter Company Transfer important configuration</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/5(19).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Set Customer Taxes and Vendor Taxes</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/6(n).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Set Fiscal Position for customers</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/7(5-5).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Inter Company Transfer orders in Odoo</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/8(1).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">ICT Order in Draft Stage</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/9(2).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Processing of ICT Order</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/10(3).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Reverse Inter Company Transfer order in Odoo</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/11(4).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Reverse ICT created for ICT Order</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/12(5).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Reverse ICT Orders in Odoo</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/13(6).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Reverse ICT Order in Draft Stage</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/14(7).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Reverse ICT Order information</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/15(8).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Processing of Reverse ICT</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/16(9).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Internal Transfer (Inter Warehouse Transfer) Orders</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/17(10).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Internal Transfer Order in draft stage</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/18(11).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Processing of Internal Transfer Order</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/19(12).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Pickings of Internal Transfer</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/20(13).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Create Reverse Internal Transfer</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/21(14).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Reverse Internal Transfer order ready to process</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/22(15).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Reverse ICT for Internal Transfer in draft stage</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/23(16).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Reverse ICT of Internal Transfer processed</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/24(17).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Pickings generated for Reverse ICT of Internal Transfer</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/25(18).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Import/Export Product List for ICT</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/26(20).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">Operation Logs of all ICT & Internal Transfer Transactions</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/27(21).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-bottom:4%;"> <h3 class="text-center mb32" style="letter-spacing: -1px !important;font-family: Roboto;font-weight:400;">ICT Process Log</h3>
|
||||
<div class="mt16 mb16">
|
||||
<img src="screens/28(22).png" class="img img-responsive center-block"/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="tab-pane" id="ept_userguid">
|
||||
<div class="container mb32"><hr style="border-top: 1px solid #eee;margin: 5px 0px;padding: 0;"/>
|
||||
<div style="padding: 10px 15px;">
|
||||
<a href=" https://shop.emiprotechnologies.com/documentation/inter-company-transfer-and-warehouse-transfer?version=12 " style="color: #091E42;" target="_blank">
|
||||
<p class="mb0" style=""><img src="User-Manual-Icon.png" style="width: 40px;margin-right: 15px;"/><span>Read User Guide</span><img src="Redirect.png" style="width: 40px;margin-left: 15px;"/></p>
|
||||
</a>
|
||||
</div>
|
||||
<hr style="border-top: 1px solid #eee;margin: 5px 0px;padding: 0;"/>
|
||||
<div style="padding: 10px 15px;">
|
||||
<a href="https://www.youtube.com/watch?v=cWdo34xTlWo&list=PLZGehiXauyla50FOCQbfVXUyzVbn_nfe6" style="color: #091E42;" target="_blank">
|
||||
<p class="mb0" style=""><img src="Video.png" style="width: 40px;margin-right: 15px;"/><span>Watch Video Tutorial</span><img src="Redirect.png" style="width: 40px;margin-left: 15px;"/></p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="ept_faqs">
|
||||
<section class="oe_container">
|
||||
<div class="s_faq mt32 mb32" style="background-color: transparent !important;">
|
||||
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq0" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
Is this app compatible with Odoo Enterprise as well as Community?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq0" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
Yes, the app works perfectly well with Odoo Enterprise (On-premise and Odoo.SH) as well as Community. Odoo Online (Cloud) does not allow installation of third-party apps and hence this app cannot be installed on Odoo Online.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq1" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
I need an extra feature in this app. How can I request it?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq1" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
You can <a style="color: #000;text-decoration: underline;" target="_blank"
|
||||
href="https://www.emiprotechnologies.com/requestquote">contact us</a>
|
||||
to request a customization in the app.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq2" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
Do I get free upgrades and support if I purchase the app?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq2" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
Yes, you can avail a free upgrade & support services for the app. Kindly read our
|
||||
<a style="color: #000;text-decoration: underline;" target="_blank"
|
||||
href="https://shop.emiprotechnologies.com/support-policy-odoo-apps">support policy</a>
|
||||
to know the details.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq3" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
What is Inter-Company Transaction?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq3" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
Inter-Company Transaction is a movement of stock between two warehouses which belongs to different companies of the same owner. In these type of transactions, one company will create a Sales Order and another company will create a Purchase Order.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq4" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
What is Inter-Warehouse transaction?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq4" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
Inter-Warehouse Transaction is a movement of stock between two warehouses which belongs to the same company. In these type of transactions, only internal transfers between warehouses get created.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq5" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
Is it necessary for an Inter-Company User to have only a single company access?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq5" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
Yes, it is necessary of the ICT User to have single company access as all transactions will be carried out by the ICT user. If the ICT user has multi-company access, it will create issues and may not work as expected.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq6" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
What is the use of resupply warehouse configuration in Inter Company Transaction app?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq6" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
If you want to transfer stock between two warehouses of the same company with the help of transit location, routes must be there in the system and these routes will be managed by the system from the Resupply warehouses configurations.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq7" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
Is it necessary to share Products & Partners between two companies while performing ICT operations?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq7" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
Yes, it is necessary to have shared Products & Partners among multiple companies in order to carry out ICT operations.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq8" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
Is Automatic Workflow applicable in case of Inter-Company Transaction and Reverse Inter-Company Transaction?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq8" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
Yes, the app allows you to configure automatic workflow for Inter-Company Transaction and Reverse Inter-Company Transaction.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" style="border: 1px solid #ddd;border-radius: 10px;margin-bottom: 20px;">
|
||||
<div class="panel panel-default" style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);padding: 15px 15px;border-radius: 10px;">
|
||||
<div class="panel-heading mt0" style="border:1px solid transparent !important;">
|
||||
<h4 class="panel-title" style="margin: 0;">
|
||||
<a class="collapsed" style="color: #000;font-size: 20px;font-weight: 500;font-family: Roboto;" data-toggle="collapse" href="#faq9" aria-expanded="false">
|
||||
<span class="panelcontent" style="padding: 0% 2%;">
|
||||
Is it possible to avoid creation of SO/PO which while transferring stock between parent/child companies?
|
||||
</span>
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="faq9" class="panel-collapse mt16 collapse" style="">
|
||||
<div>
|
||||
<p class="mb32" style="border-left: 4px dotted #e6e8ea;height: auto;padding-left: 3%;margin-left: 2%;font-family: Roboto;">
|
||||
No, it's not possible. The app will create the relevant SO/PO for all Inter-Company Transactions. If you have a special scenario where you want to avoid this, you can request customization.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container"><h2 style="color: #091E42;font-family: "Montserrat";text-align: center;margin: 25px auto;text-transform: uppercase;" class="oe_slogan">
|
||||
<b>Suggested Products</b>
|
||||
</h2>
|
||||
|
||||
<div id="demo" class="row carousel slide mt64 mb32" data-ride="carousel">
|
||||
<!-- The slideshow -->
|
||||
<div class="carousel-inner">
|
||||
<div class="carousel-item active">
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/amazon_all_in_one/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="All-in-One-Solution-for-Amazon-Seller.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
All in One Solution for Amazon Seller
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/advance_purchase_ordering_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Advance-Purchase-Ordering-Reordering.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Advance Purchase Ordering / Reordering
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/consignment_management_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Consignment-Management.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Consignment Management
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-item">
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/inventory_coverage_report_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Inventory-Covarge-Report.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Inventory Coverage Report
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/amazon_vendor_central_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Amazon-Vendor-Central-Integration.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Amazon Vendor Central Integration
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/rma_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Return-Order-Management.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
RMA ( Return Merchandise Authorisation ) in Odoo
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-item">
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/edi_ftp_integration/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Dropshipper-EDI-Integration-in-Odoo.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Dropshipper EDI Integration in Odoo
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/dropship_edi_integration_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Dropshipping-EDI-Integration-in-Odoo.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Dropshipping EDI Integration in Odoo
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/promotion_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Manage-Sale-Promotions-in-Odoo.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Manage Sale Promotions in Odoo
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-item">
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/sale_margin_report_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Sale-Margin-Report.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Sale Margin Report
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/top_growing_product_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Top-Growing-Products-Report.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Top Growing Products Report
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||
<a href="https://apps.odoo.com/apps/modules/12.0/customer_review_global_channel_ept/" target="_blank">
|
||||
<div style="box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1), 0 5px 15px rgba(0, 0, 0, 0.07);border-radius: 10px;">
|
||||
<img class="img img-responsive center-block"
|
||||
style="border-top-left-radius: 10px;border-top-right-radius: 10px;"
|
||||
src="Feedback-email-to-customers-for product review.jpg"/>
|
||||
<h4 class="mt0" style="padding:6% 4%;text-align: center;white-space: nowrap;width: 100%;overflow: hidden;text-overflow: ellipsis;font-family: Roboto-medium;">
|
||||
Feedback email to customers for Product Review
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Left and right controls -->
|
||||
<a class="carousel-control-prev" href="#demo" data-slide="prev" style="left:-25px;width: 35px;color: #000;">
|
||||
<span class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
|
||||
</a>
|
||||
<a class="carousel-control-next" href="#demo" data-slide="next" style="right:-25px;width: 35px;color: #000;">
|
||||
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container">
|
||||
<div class="row mb64" style="display: block;margin: 0 auto;width: 100%;text-align: center;">
|
||||
<div class="mt32" style="display: inline-block;margin:0px 10px;">
|
||||
<a href="https://www.emiprotechnologies.com/requestquote" target="_blank" style="font-family: "Montserrat";">
|
||||
<h4 class="mt16 mb0" style="padding: 16px 45px;font-family: "Montserrat";text-transform: uppercase;background: linear-gradient(to right, #083FDA, #087DDA);text-align: center;box-shadow: 2px 1px 12px 3px #ece6e6;border-radius: 10px;color: #fff;font-weight: 700;">Contact Us</h4>
|
||||
</a>
|
||||
</div>
|
||||
<div class="mt32" style="display: inline-block;margin:0px 10px;">
|
||||
<a href="https://www.emiprotechnologies.com/odoo-apps-support" target="_blank">
|
||||
<h4 class="mt16 mb0" style="background: linear-gradient(to right, #F27E00, #F29500);padding: 16px 45px;font-family: "Montserrat";text-transform: uppercase;text-align: center;box-shadow: 2px 1px 12px 3px #ece6e6;border-radius: 10px;color: #fff;font-weight: 700;">Support</h4>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 34 KiB |
BIN
intercompany_transaction_ept/static/description/screens/6(n).png
Normal file
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 72 KiB |
BIN
intercompany_transaction_ept/static/description/screens/8(1).png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
intercompany_transaction_ept/static/description/screens/9(2).png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
intercompany_transaction_ept/static/src/img/worldpay_icon.png
Executable file
|
After Width: | Height: | Size: 2.3 KiB |
64
intercompany_transaction_ept/static/src/js/payment_worldpay_ept.js
Executable file
@@ -0,0 +1,64 @@
|
||||
odoo.define('payment_worldpay_ept.worldpay', function(require) {
|
||||
"use strict";
|
||||
|
||||
var ajax = require('web.ajax');
|
||||
var rpc = require('web.rpc');
|
||||
|
||||
function worldpay_payment_submit (clientkey) {
|
||||
Worldpay.useTemplateForm({
|
||||
'clientKey':clientkey,
|
||||
'form':'paymentFormworldpay',
|
||||
'paymentSection':'wk_woldpayPaymentSection',
|
||||
'display':'inline',
|
||||
'saveButton':false,
|
||||
'type':'card',
|
||||
'callback': function(obj) {
|
||||
if (obj && obj.token) {
|
||||
submit_payment_worldpay(obj.token)
|
||||
}
|
||||
else{
|
||||
alert('please try again');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function submit_payment_worldpay(token) {
|
||||
$('#ept_worldpay_myModal').modal('hide');
|
||||
var payment_form = $('.o_payment_form');
|
||||
payment_form.append('<div class="payment_ept_worldpay_loader" style="display:block;position: fixed;top:0;left:0;right:0;bottom:0;background: rgba(0,0,0,0.5);z-index:9999;"><svg x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 0 0" xml:space="preserve" style=" width: 100px;height: 100px;margin: 20% auto 0;display:block;"><path fill="#fff" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"><animateTransform attributeName="transform" attributeType="XML" type="rotate"dur="1s" from="0 50 50"to="360 50 50" repeatCount="indefinite" /></path></svg></div>')
|
||||
var $form = $("input[name='worldpay_client_key']").parent('form');
|
||||
$form.attr('action','/payment/worldpay/feedback')
|
||||
var $input = $('<input type=hidden name=worldpayToken />').val(token);
|
||||
$form.append($input);
|
||||
$form.submit();
|
||||
}
|
||||
|
||||
require('web.dom_ready');
|
||||
if (!$('.o_payment_form').length) {
|
||||
return $.Deferred().reject("DOM doesn't contain '.o_payment_form'");
|
||||
}
|
||||
|
||||
$('#submit_ept_worldpay_payment').on('click',function(){
|
||||
Worldpay.submitTemplateForm();
|
||||
});
|
||||
|
||||
$.getScript("https://cdn.worldpay.com/v1/worldpay.js", function() {
|
||||
$('#ept_worldpay_myModal').appendTo('body').modal('show');
|
||||
|
||||
//Bootstrap Model Close Event
|
||||
$("#ept_worldpay_myModal").on('hidden.bs.modal', function () {
|
||||
$("#ept_worldpay_myModal").remove(); //remove model
|
||||
$('.modal-backdrop').remove();
|
||||
$("input[name='worldpay_client_key']").parent("form[provider='worldpay']").remove(); //remove Form
|
||||
});
|
||||
|
||||
var worldpay_client_key = $("input[name='worldpay_client_key']").val();
|
||||
if(worldpay_client_key && worldpay_client_key != 'dummy'){
|
||||
worldpay_payment_submit(worldpay_client_key);
|
||||
}
|
||||
else{
|
||||
alert('please configure worldpay client key')
|
||||
}
|
||||
});
|
||||
});
|
||||
124
intercompany_transaction_ept/views/all_search_views.xml
Normal file
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="inter_company_transfer_ept_sale_search_view" model="ir.ui.view">
|
||||
<field name="name">inter.company.transfer.ept.sale.view.search</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="inherit_id" ref="sale.view_sales_order_filter" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='my_sale_orders_filter']" position="after">
|
||||
<separator />
|
||||
<field name="intercompany_transfer_id" />
|
||||
<filter string="ICT Sales" name='intercompany_transfer_id'
|
||||
domain="[('intercompany_transfer_id','!=', False)]" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="inter_company_transfer_ept_purchase_search_view" model="ir.ui.view">
|
||||
<field name="name">inter.company.transfer.ept.purchase.view.search</field>
|
||||
<field name="model">purchase.order</field>
|
||||
<field name="inherit_id" ref="purchase.view_purchase_order_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='to_approve']" position="before">
|
||||
<field name ="intercompany_transfer_id" />
|
||||
<filter string="ICT Purchase" name='intercompany_transfer_id' domain="[('intercompany_transfer_id','!=', False)]"/>
|
||||
<separator/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="inter_company_transfer_ept_invoice_search_view" model="ir.ui.view">
|
||||
<field name="name">inter.company.transfer.ept.invoice.view.search</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="inherit_id" ref="account.view_account_invoice_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='activities_upcoming_all']" position="after">
|
||||
<separator/>
|
||||
<field name ="intercompany_transfer_id" />
|
||||
<filter string="ICT Invoices" name="intercompany_transfer_id" domain="[('intercompany_transfer_id','!=', False)]"/>
|
||||
<separator/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="inter_company_transfer_ept_search_view" model="ir.ui.view" >
|
||||
<field name="name">Inter Company Transfer Search View</field>
|
||||
<field name="model">inter.company.transfer.ept</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Inter Company Transfer">
|
||||
<field name="name" string="Name" filter_domain="[('name','ilike',self)]"/>
|
||||
<field name="source_warehouse_id"/>
|
||||
<field name="source_company_id"/>
|
||||
<field name="destination_warehouse_id"/>
|
||||
<field name="destination_company_id"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Source Warehouse" domain="[]" name="source_warehouse_id" context="{'group_by':'source_warehouse_id'}"/>
|
||||
<filter string="To Warehouse" domain="[]" name="destination_warehouse_id" context="{'group_by':'destination_warehouse_id'}"/>
|
||||
<filter string="State" domain="[]" name="state" context="{'group_by':'state'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="inter_company_transfer_log_ept_search_view" model="ir.ui.view" >
|
||||
<field name="name">Inter Company Transfer Log Search View</field>
|
||||
<field name="model">inter.company.transfer.log.ept</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Inter Company Transfer LOG">
|
||||
<field name="name" string="Name" filter_domain="[('name','ilike',self)]"/>
|
||||
<field name="ict_log_date"/>
|
||||
<field name="ict_process"/>
|
||||
<field name="ict_operation"></field>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Process" domain="[]" name="ict_process" context="{'group_by':'ict_process'}"/>
|
||||
<filter string="Operation" domain="[]" name="ict_operation" context="{'group_by':'ict_operation'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
<record id="inter_company_transfer_ept_picking_search_view" model="ir.ui.view">
|
||||
<field name="name">inter.company.transfer.ept.purchase.view.search</field>
|
||||
<field name="model">stock.picking</field>
|
||||
<field name="inherit_id" ref="stock.view_picking_internal_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='activities_overdue']" position="before">
|
||||
<field name ="intercompany_transfer_id" />
|
||||
<filter string="ICT Pickings" name="intercompany_transfer_id" domain="[('intercompany_transfer_id','!=', False)]"/>
|
||||
<separator/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="inter_company_transfer_ept_sale_order_search_view" model="ir.ui.view">
|
||||
<field name="name">inter.company.transfer.ept.sale.order.view.search</field>
|
||||
<field name="model">sale.report</field>
|
||||
<field name="inherit_id" ref="sale.view_order_product_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@expand='0']" position="inside">
|
||||
<filter name="intercompany_transfer_id" string="ICT Sales" domain="[('intercompany_transfer_id','!=', False)]"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="inter_company_transfer_ept_sale_order_pivot_search_view" model="ir.ui.view">
|
||||
<field name="name">inter.company.transfer.ept.sale.order.pivot.view.search</field>
|
||||
<field name="model">sale.report</field>
|
||||
<field name="inherit_id" ref="sale.view_order_product_pivot"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='team_id']" position="after">
|
||||
<field name="intercompany_transfer_id" type="row"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
</odoo>
|
||||