+ Employee can request available vehicle for a time period.
+ He should mention the time period and purpose. Then he can send this request to hr manager. Here also
+ module checking the availability of vehicles
+
+
+
+
+
+
+
+
+ Features
+
+
+
+ Employee can request for any vehicle
+
+
+
+ Checking availability of vehicles
+
+
+
+ Validation for send request
+
+
+
+ Validation for requested dates
+
+
+
+ Advanced search view
+
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Here any employee can request available vehicle for a time period.
+ He should mention the time period and purpose. Then he can send this request to hr manager. Here also
+ module checking the availability of vehicle
+
+
+
+
+
+
+
+
+
+ Here Hr Manager can approve the vehicle request. Or she can refuse the request. Also Employee
+ can cancel this request from this stage before approval or rejection.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/invoice_stock_move/README.rst b/invoice_stock_move/README.rst
new file mode 100644
index 000000000..501dc1c08
--- /dev/null
+++ b/invoice_stock_move/README.rst
@@ -0,0 +1,37 @@
+Stock Picking From Invoice
+==========================
+This Module Enables To Create Stocks Picking From Customer/Supplier Invoice
+
+Configuration
+=============
+* No additional configurations needed
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+* Developers: Saritha Sahadevan @cybrosys, odoo@cybrosys.com
+ Yadhukrishna K V13 @cybrosys, odoo@cybrosys.com
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/invoice_stock_move/__init__.py b/invoice_stock_move/__init__.py
new file mode 100644
index 000000000..48fd56964
--- /dev/null
+++ b/invoice_stock_move/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Saritha Sahadevan @cybrosys(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import models
diff --git a/invoice_stock_move/__manifest__.py b/invoice_stock_move/__manifest__.py
new file mode 100644
index 000000000..ed7785e17
--- /dev/null
+++ b/invoice_stock_move/__manifest__.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Saritha Sahadevan @cybrosys(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+{
+ 'name': "Stock Picking From Invoice",
+ 'version': '13.0.1.0.0',
+ 'summary': """Stock Picking From Customer/Supplier Invoice""",
+ 'description': """This Module Enables To Create Stocks Picking From Customer/Supplier Invoice""",
+ 'author': "Cybrosys Techno Solutions",
+ 'company': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'category': 'Accounting',
+ 'depends': ['base', 'account', 'stock'],
+ 'data': ['views/invoice_stock_move_view.xml'],
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/invoice_stock_move/doc/RELEASE_NOTES.md b/invoice_stock_move/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..39878fa46
--- /dev/null
+++ b/invoice_stock_move/doc/RELEASE_NOTES.md
@@ -0,0 +1,7 @@
+## Module
+
+#### 11.11.2019
+#### Version 13.0.1.0.0
+#### ADD
+
+Initial Commit
diff --git a/invoice_stock_move/models/__init__.py b/invoice_stock_move/models/__init__.py
new file mode 100644
index 000000000..c762ff19a
--- /dev/null
+++ b/invoice_stock_move/models/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Saritha Sahadevan @cybrosys(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import invoice_stock
diff --git a/invoice_stock_move/models/invoice_stock.py b/invoice_stock_move/models/invoice_stock.py
new file mode 100644
index 000000000..632592c8c
--- /dev/null
+++ b/invoice_stock_move/models/invoice_stock.py
@@ -0,0 +1,130 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2019-TODAY Cybrosys Technologies().
+# Author: Saritha Sahadevan @cybrosys(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo.exceptions import UserError
+from odoo import models, fields, api, _
+
+
+class InvoiceStockMove(models.Model):
+ _inherit = 'account.move'
+
+ @api.model
+ def _default_picking_receive(self):
+ type_obj = self.env['stock.picking.type']
+ company_id = self.env.context.get('company_id') or self.env.user.company_id.id
+ types = type_obj.search([('code', '=', 'incoming'), ('warehouse_id.company_id', '=', company_id)], limit=1)
+ if not types:
+ types = type_obj.search([('code', '=', 'incoming'), ('warehouse_id', '=', False)])
+ return types[:1]
+
+ @api.model
+ def _default_picking_transfer(self):
+ type_obj = self.env['stock.picking.type']
+ company_id = self.env.context.get('company_id') or self.env.user.company_id.id
+ types = type_obj.search([('code', '=', 'outgoing'), ('warehouse_id.company_id', '=', company_id)], limit=1)
+ if not types:
+ types = type_obj.search([('code', '=', 'outgoing'), ('warehouse_id', '=', False)])
+ return types[:4]
+
+ picking_count = fields.Integer(string="Count")
+ invoice_picking_id = fields.Many2one('stock.picking', string="Picking Id")
+ picking_type_id = fields.Many2one('stock.picking.type', 'Picking Type', required=True,
+ default=_default_picking_receive,
+ help="This will determine picking type of incoming shipment")
+ picking_transfer_id = fields.Many2one('stock.picking.type', 'Deliver To', required=True,
+ default=_default_picking_transfer,
+ help="This will determine picking type of outgoing shipment")
+ state = fields.Selection([
+ ('draft', 'Draft'),
+ ('proforma', 'Pro-forma'),
+ ('proforma2', 'Pro-forma'),
+ ('posted', 'Posted'),
+ ('post', 'Post'),
+ ('cancel', 'Cancelled'),
+ ('done', 'Received'),
+ ], string='Status', index=True, readonly=True, default='draft',
+ track_visibility='onchange', copy=False)
+
+ def action_stock_move(self):
+ for order in self:
+ if not self.invoice_picking_id:
+ pick = {
+ 'picking_type_id': self.picking_type_id.id,
+ 'partner_id': self.partner_id.id,
+ 'origin': self.name,
+ 'location_dest_id': self.picking_type_id.default_location_dest_id.id,
+ 'location_id': self.partner_id.property_stock_supplier.id
+ }
+ picking = self.env['stock.picking'].create(pick)
+ self.invoice_picking_id = picking.id
+ self.picking_count = len(picking)
+ moves = order.invoice_line_ids.filtered(lambda r: r.product_id.type in ['product', 'consu'])._create_stock_moves(picking)
+ move_ids = moves._action_confirm()
+ move_ids._action_assign()
+
+ def action_view_picking(self):
+ action = self.env.ref('stock.action_picking_tree_ready')
+ result = action.read()[0]
+ result.pop('id', None)
+ result['context'] = {}
+ result['domain'] = [('id', '=', self.invoice_picking_id.id)]
+ pick_ids = sum([self.invoice_picking_id.id])
+ if pick_ids:
+ res = self.env.ref('stock.view_picking_form', False)
+ result['views'] = [(res and res.id or False, 'form')]
+ result['res_id'] = pick_ids or False
+ return result
+
+
+class SupplierInvoiceLine(models.Model):
+ _inherit = 'account.move.line'
+
+ def _create_stock_moves(self, picking):
+ moves = self.env['stock.move']
+ done = self.env['stock.move'].browse()
+ for line in self:
+ price_unit = line.price_unit
+ template = {
+ 'name': line.name or '',
+ 'product_id': line.product_id.id,
+ 'product_uom': line.product_uom_id.id,
+ 'location_id': line.move_id.partner_id.property_stock_supplier.id,
+ 'location_dest_id': picking.picking_type_id.default_location_dest_id.id,
+ 'picking_id': picking.id,
+ # 'move_dest_id': False,
+ 'state': 'draft',
+ 'company_id': line.move_id.company_id.id,
+ 'price_unit': price_unit,
+ 'picking_type_id': picking.picking_type_id.id,
+ # 'procurement_id': False,
+ 'route_ids': 1 and [
+ (6, 0, [x.id for x in self.env['stock.location.route'].search([('id', 'in', (2, 3))])])] or [],
+ 'warehouse_id': picking.picking_type_id.warehouse_id.id,
+ }
+ print(template['route_ids'], "two")
+ diff_quantity = line.quantity
+ tmp = template.copy()
+ tmp.update({
+ 'product_uom_qty': diff_quantity,
+ })
+ template['product_uom_qty'] = diff_quantity
+ done += moves.create(template)
+ return done
diff --git a/invoice_stock_move/static/description/banner.jpg b/invoice_stock_move/static/description/banner.jpg
new file mode 100644
index 000000000..5da168516
Binary files /dev/null and b/invoice_stock_move/static/description/banner.jpg differ
diff --git a/invoice_stock_move/static/description/cust_warehouse.png b/invoice_stock_move/static/description/cust_warehouse.png
new file mode 100644
index 000000000..c66556fb4
Binary files /dev/null and b/invoice_stock_move/static/description/cust_warehouse.png differ
diff --git a/invoice_stock_move/static/description/cybro_logo.png b/invoice_stock_move/static/description/cybro_logo.png
new file mode 100644
index 000000000..bb309114c
Binary files /dev/null and b/invoice_stock_move/static/description/cybro_logo.png differ
diff --git a/invoice_stock_move/static/description/icon.png b/invoice_stock_move/static/description/icon.png
new file mode 100644
index 000000000..31df27645
Binary files /dev/null and b/invoice_stock_move/static/description/icon.png differ
diff --git a/invoice_stock_move/static/description/index.html b/invoice_stock_move/static/description/index.html
new file mode 100644
index 000000000..a4a91701f
--- /dev/null
+++ b/invoice_stock_move/static/description/index.html
@@ -0,0 +1,350 @@
+
+
+
+
+ Stock Picking From Invoice
+
+
+ This Module Enables To Stock Pickings From Customer/Supplier Invoice.
+
+ Currently in Odoo , We cannot transfer stocks directly from customer/supplier invoice.
+ We need to depend sales module or purchase module to transfer or receive goods.
+ This module enable to transfer stocks from invoices without depending sales and purchase module.
+
+
+
+
+
+
+
+ Features
+
+
+
+ Stock Picking From Customer Invoice.
+
+
+
+ Stock Picking From Supplier Invoice.
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+ Transfer Button in Customer invoice
+
+
+
+
+
+
+ On clicking Transfer Button, Stock Is Moved To Customer Inventory.
+
+
+
+
+
+
+ Receive Button in Vendor Bill.
+
+
+
+
+
+
+ >On clicking Receive Button, Stock Is Moved To Our Inventory.
+