work on intercompany

This commit is contained in:
sonal arora
2020-09-02 15:21:19 +05:30
parent 7e96103d40
commit a8c3e9a5ef
115 changed files with 3152 additions and 0 deletions

View 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 its 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

View 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)]})

View 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,
}

View 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>

View 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>

View 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

View 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

View File

@@ -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"))

View File

@@ -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,
}

View File

@@ -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

View File

@@ -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')

View 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)

View 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")

View 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

View 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

View File

@@ -0,0 +1 @@
from . import sale_report

View 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

View File

@@ -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>

View 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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_inter_company_transfer_ept_manager inter.company.transfer.ept.manager model_inter_company_transfer_ept intercompany_transfer_manager_group 1 1 1 1
3 access_inter_company_transfer_ept_user inter.company.transfer.ept.user model_inter_company_transfer_ept intercompany_transfer_user_group 1 1 1 0
4 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
5 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
6 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
7 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
8 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
9 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
10 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
11 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
12 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
13 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

View File

@@ -0,0 +1,4 @@
Default Code,Qty,Price
2030020100075,5,400
2030015000007,4,500
2030030100003,8,2000
1 Default Code Qty Price
2 2030020100075 5 400
3 2030015000007 4 500
4 2030030100003 8 2000

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View 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 its 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View 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&#37;;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&#37;;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&amp;version=12&amp;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: &quot;Montserrat&quot;;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: &quot;Montserrat&quot;;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&#37;;">
<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&#37;;">
<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&#37;;">
<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&#37;;">
<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&#37;;">
<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&#37;;">
<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&#37;;margin: 0&#37; 2&#37;;padding-top:4&#37;;">
<!-- 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 &amp; 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 &amp; 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 its 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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&#37;;"/>
</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&#37;;"/>
</div>
</div>
</section>
</div>
</div>
<div class="tab-pane" id="ept_screenshots">
<section class="oe_container">
<div style="margin-bottom:4&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&#37;;"> <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&amp;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&#37; 2&#37;;">
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&#37;;margin-left: 2&#37;;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&#37; 2&#37;;">
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&#37;;margin-left: 2&#37;;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&#37; 2&#37;;">
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&#37;;margin-left: 2&#37;;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&#37; 2&#37;;">
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&#37;;margin-left: 2&#37;;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&#37; 2&#37;;">
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&#37;;margin-left: 2&#37;;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&#37; 2&#37;;">
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&#37;;margin-left: 2&#37;;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&#37; 2&#37;;">
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&#37;;margin-left: 2&#37;;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&#37; 2&#37;;">
Is it necessary to share Products &amp; 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&#37;;margin-left: 2&#37;;font-family: Roboto;">
Yes, it is necessary to have shared Products &amp; 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&#37; 2&#37;;">
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&#37;;margin-left: 2&#37;;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&#37; 2&#37;;">
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&#37;;margin-left: 2&#37;;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: &quot;Montserrat&quot;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37; 4&#37;;text-align: center;white-space: nowrap;width: 100&#37;;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&#37;;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: &quot;Montserrat&quot;;">
<h4 class="mt16 mb0" style="padding: 16px 45px;font-family: &quot;Montserrat&quot;;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: &quot;Montserrat&quot;;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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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')
}
});
});

View 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>

Some files were not shown because too many files have changed in this diff Show More