Add odex25_inventory
|
|
@ -1,2 +1,2 @@
|
||||||
# odex25-standard-moduless
|
# odex25-standard-modules
|
||||||
This Repo contains general standard modules for all projects.
|
This Repo contains general standard modules for all projects.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
Odoo Proprietary License v1.0
|
||||||
|
|
||||||
|
This software and associated files (the "Software") may only be used (executed,
|
||||||
|
modified, executed after modifications) if you have purchased a valid license
|
||||||
|
from the authors, typically via Odoo Apps, or if you have received a written
|
||||||
|
agreement from the authors of the Software (see the COPYRIGHT file).
|
||||||
|
|
||||||
|
You may develop Odoo modules that use the Software as a library (typically
|
||||||
|
by depending on it, importing it and using its resources), but without copying
|
||||||
|
any source code or material from the Software. You may distribute those
|
||||||
|
modules under the license of your choice, provided that this license is
|
||||||
|
compatible with the terms of the Odoo Proprietary License (For example:
|
||||||
|
LGPL, MIT, or proprietary licenses similar to this one).
|
||||||
|
|
||||||
|
It is forbidden to publish, distribute, sublicense, or sell copies of the Software
|
||||||
|
or modified copies of the Software.
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice must be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
from . import wizard
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
# Author: Aktiv Software PVT. LTD.
|
||||||
|
# mail: odoo@aktivsoftware.com
|
||||||
|
# Copyright (C) 2015-Present Aktiv Software PVT. LTD.
|
||||||
|
# Contributions:
|
||||||
|
# Aktiv Software:
|
||||||
|
# - Janvi Raval
|
||||||
|
# - Komal Jimudiya
|
||||||
|
# - Burhan Vakharia
|
||||||
|
# - Tanvi Gajera
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Internal Material Request / Inter-Warehouse Request",
|
||||||
|
"version": "14.0.1.0.3",
|
||||||
|
"summary": """This module allows Warehouse users to create Internal Material Requests.
|
||||||
|
Internal Warehouse Transfer,
|
||||||
|
Stock Request,
|
||||||
|
Goods Request,
|
||||||
|
2-Step Delivery Requests with Transit Location,
|
||||||
|
Inter-Warehouse Transfer,
|
||||||
|
Inter Warehouse Transfer,
|
||||||
|
Material Request,
|
||||||
|
Internal Request,
|
||||||
|
Stock Request,
|
||||||
|
Goods Request,
|
||||||
|
Transit Request,
|
||||||
|
Goods Transfer,
|
||||||
|
Stock Transfer,
|
||||||
|
Material Transfer,
|
||||||
|
Warehouse Transfer,
|
||||||
|
Internal Warehouse Transfer,
|
||||||
|
Goods Transfer between Warehouse,
|
||||||
|
Stock Transfer between Transfer,
|
||||||
|
Warehouse to Warehouse Transfer,
|
||||||
|
""",
|
||||||
|
"description": """
|
||||||
|
Title: Internal Material Request / Inter-Warehouse Request \n
|
||||||
|
Author: Aktiv Software PVT. LTD. \n
|
||||||
|
mail: odoo@aktivsoftware.com \n
|
||||||
|
Copyright (C) 2015-Present Aktiv Software PVt. LTD. \n
|
||||||
|
Contributions: Aktiv Software: \n
|
||||||
|
- Janvi Raval
|
||||||
|
- Komal Jimudiya
|
||||||
|
- Burhan Vakharia
|
||||||
|
- Tanvi Gajera
|
||||||
|
This module allows users to create Internal material request request
|
||||||
|
to any internal stock location.
|
||||||
|
It allows users to create Inter-Warehouse Requests.
|
||||||
|
The requests can be 1-Step or 2-Step Requests.
|
||||||
|
2-Step Requests are routed via a Transit Location.
|
||||||
|
Material Request,
|
||||||
|
Internal Request,
|
||||||
|
Stock Request,
|
||||||
|
Goods Request,
|
||||||
|
Transit Request,
|
||||||
|
Goods Transfer,
|
||||||
|
Stock Transfer,
|
||||||
|
Material Transfer,
|
||||||
|
Warehouse Transfer,
|
||||||
|
Internal Warehouse Transfer,
|
||||||
|
Goods Transfer between Warehouse,
|
||||||
|
Stock Transfer between Transfer,
|
||||||
|
Warehouse to Warehouse Transfer,
|
||||||
|
""",
|
||||||
|
"author": "Aktiv Software",
|
||||||
|
"website": "http://www.aktivsoftware.com",
|
||||||
|
"license": "OPL-1",
|
||||||
|
"price": 18.00,
|
||||||
|
"currency": "EUR",
|
||||||
|
'category': 'Odex25-Inventory/Odex25-Inventory',
|
||||||
|
"depends": ["stock"],
|
||||||
|
"data": [
|
||||||
|
"security/res_groups.xml",
|
||||||
|
"security/ir.model.access.csv",
|
||||||
|
"data/material_request_sequence.xml",
|
||||||
|
"wizard/reject_reason_wizard_views.xml",
|
||||||
|
"wizard/transit_location_wizard.xml",
|
||||||
|
"views/material_request_view.xml",
|
||||||
|
"views/res_config_views.xml",
|
||||||
|
"views/res_company_views.xml",
|
||||||
|
],
|
||||||
|
"images": ["static/description/banner.jpg"],
|
||||||
|
"installable": True,
|
||||||
|
"application": False,
|
||||||
|
"auto_install": False,
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo noupdate="1">
|
||||||
|
<record id="material_request_seq" model="ir.sequence">
|
||||||
|
<field name="name">Material Request Sequence</field>
|
||||||
|
<field name="code">material.request.seq</field>
|
||||||
|
<field name="prefix">MR</field>
|
||||||
|
<field name="padding">5</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,613 @@
|
||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * ak_material_request
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 14.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2024-02-04 07:46+0000\n"
|
||||||
|
"PO-Revision-Date: 2024-02-04 07:46+0000\n"
|
||||||
|
"Last-Translator: \n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: \n"
|
||||||
|
"Plural-Forms: \n"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__two_verify
|
||||||
|
msgid "2 Step Delivery(Via Transit Location)"
|
||||||
|
msgstr "التسليم بخطوتين (عبر موقع وسيط)"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_res_company__two_step_material_req
|
||||||
|
msgid "2 step Picking"
|
||||||
|
msgstr "التحويل على خطوتين"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.inherit_res_config_setting_view
|
||||||
|
msgid ""
|
||||||
|
"<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-"
|
||||||
|
"specific.\"/>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_needaction
|
||||||
|
msgid "Action Needed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__activity_ids
|
||||||
|
msgid "Activities"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__activity_exception_decoration
|
||||||
|
msgid "Activity Exception Decoration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__activity_state
|
||||||
|
msgid "Activity State"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__activity_type_icon
|
||||||
|
msgid "Activity Type Icon"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_res_config_settings__two_step_material_req
|
||||||
|
msgid "Allow Material Request in 2-Steps"
|
||||||
|
msgstr "السماح بطلب التحويل على خطوتين"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_form_view
|
||||||
|
msgid "Approve"
|
||||||
|
msgstr "يعتمد"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields.selection,name:ak_material_request.selection__material_request__state__approve
|
||||||
|
msgid "Approved"
|
||||||
|
msgstr "موافقة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__approved_user_id
|
||||||
|
msgid "Approved By"
|
||||||
|
msgstr "تمت الموافقة من طرف"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_attachment_count
|
||||||
|
msgid "Attachment Count"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__available_qty
|
||||||
|
msgid "Available Quantity"
|
||||||
|
msgstr "الكمية المتوفرة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.reject_reason_form_view
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.transit_location_warning_form_view
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "إلغاء"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__product_uom_category_id
|
||||||
|
msgid "Category"
|
||||||
|
msgstr "فئة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model,name:ak_material_request.model_res_company
|
||||||
|
msgid "Companies"
|
||||||
|
msgstr "شركات"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__company_id
|
||||||
|
msgid "Company"
|
||||||
|
msgstr "شركة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model,name:ak_material_request.model_res_config_settings
|
||||||
|
msgid "Config Settings"
|
||||||
|
msgstr "ضبط الاعدادات"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields.selection,name:ak_material_request.selection__material_request__state__confirm
|
||||||
|
msgid "Confirmed"
|
||||||
|
msgstr "مؤكد"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request_line__product_uom_category_id
|
||||||
|
msgid ""
|
||||||
|
"Conversion between Units of Measure can only occur if they belong to the "
|
||||||
|
"same category. The conversion will be made based on the ratios."
|
||||||
|
msgstr ""
|
||||||
|
"لا يمكن أن يحدث التحويل بين وحدات القياس إلا إذا كانت تنتمي إلى نفس الفئة. "
|
||||||
|
"سيتم إجراء التحويل على أساس النسب."
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__create_uid
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__create_uid
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_reject_reason_wizard__create_uid
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_transit_location_warning__create_uid
|
||||||
|
msgid "Created by"
|
||||||
|
msgstr "انشأ من طرف"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__create_date
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__create_date
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_reject_reason_wizard__create_date
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_transit_location_warning__create_date
|
||||||
|
msgid "Created on"
|
||||||
|
msgstr "تم الانشاء في"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__dest_location_id
|
||||||
|
msgid "Deliver Stock From"
|
||||||
|
msgstr "تسليم المخزون من"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__delivery_state
|
||||||
|
msgid "Delivery State"
|
||||||
|
msgstr "حالة التسليم"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__description
|
||||||
|
msgid "Description"
|
||||||
|
msgstr "الوصف"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_search_view
|
||||||
|
msgid "Destination Location"
|
||||||
|
msgstr "الوجهة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__display_name
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__display_name
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_reject_reason_wizard__display_name
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_res_company__display_name
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_res_config_settings__display_name
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_stock_picking__display_name
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_transit_location_warning__display_name
|
||||||
|
msgid "Display Name"
|
||||||
|
msgstr "الاسم"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields.selection,name:ak_material_request.selection__material_request__state__draft
|
||||||
|
msgid "Draft"
|
||||||
|
msgstr "مسودة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_follower_ids
|
||||||
|
msgid "Followers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_channel_ids
|
||||||
|
msgid "Followers (Channels)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_partner_ids
|
||||||
|
msgid "Followers (Partners)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__activity_type_icon
|
||||||
|
msgid "Font awesome icon e.g. fa-tasks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__good_needed_on
|
||||||
|
msgid "Goods Needed On"
|
||||||
|
msgstr "استلام المخزون الى"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_search_view
|
||||||
|
msgid "Group By"
|
||||||
|
msgstr "تجميع بواسطة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__id
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__id
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_reject_reason_wizard__id
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_res_company__id
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_res_config_settings__id
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_stock_picking__id
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_transit_location_warning__id
|
||||||
|
msgid "ID"
|
||||||
|
msgstr "المُعرف"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__activity_exception_icon
|
||||||
|
msgid "Icon"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__activity_exception_icon
|
||||||
|
msgid "Icon to indicate an exception activity."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__message_needaction
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__message_unread
|
||||||
|
msgid "If checked, new messages require your attention."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__message_has_error
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__message_has_sms_error
|
||||||
|
msgid "If checked, some messages have a delivery error."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.actions.act_window,name:ak_material_request.action_material_request
|
||||||
|
#: model:ir.ui.menu,name:ak_material_request.menu_action_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.inherit_res_config_setting_view
|
||||||
|
msgid "Internal Material Request"
|
||||||
|
msgstr "طلب تحويل داخلي"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_is_follower
|
||||||
|
msgid "Is Follower"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request____last_update
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line____last_update
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_reject_reason_wizard____last_update
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_res_company____last_update
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_res_config_settings____last_update
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_stock_picking____last_update
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_transit_location_warning____last_update
|
||||||
|
msgid "Last Modified on"
|
||||||
|
msgstr "تاريخ آخر تعديل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__write_uid
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__write_uid
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_reject_reason_wizard__write_uid
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_transit_location_warning__write_uid
|
||||||
|
msgid "Last Updated by"
|
||||||
|
msgstr "آخر تحديث بواسطة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__write_date
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__write_date
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_reject_reason_wizard__write_date
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_transit_location_warning__write_date
|
||||||
|
msgid "Last Updated on"
|
||||||
|
msgstr "آخر تحديث بتاريخ"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_search_view
|
||||||
|
msgid "Location"
|
||||||
|
msgstr "الموقع"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__dest_location_id
|
||||||
|
msgid "Location from where stock will be delivered."
|
||||||
|
msgstr "الموقع الذي سيتم تسليم المخزون منه."
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_main_attachment_id
|
||||||
|
msgid "Main Attachment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_form_view
|
||||||
|
msgid "Material Lines"
|
||||||
|
msgstr "بنود التحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model,name:ak_material_request.model_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_reject_reason_wizard__material_request_id
|
||||||
|
#: model:ir.module.category,description:ak_material_request.material_request_group
|
||||||
|
#: model:ir.module.category,name:ak_material_request.material_request_group
|
||||||
|
msgid "Material Request"
|
||||||
|
msgstr "طلب التحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model,name:ak_material_request.model_material_request_line
|
||||||
|
msgid "Material Request Lines"
|
||||||
|
msgstr "تفاصيل طلب التحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:res.groups,name:ak_material_request.group_manager_material_request
|
||||||
|
msgid "Material Request Manager"
|
||||||
|
msgstr "مدير طلبات التحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model,name:ak_material_request.model_reject_reason_wizard
|
||||||
|
msgid "Material Request Reject Reason Wizard"
|
||||||
|
msgstr "معالج سبب رفض طلب التحويل الداخلي"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_search_view
|
||||||
|
msgid "Material Request Search"
|
||||||
|
msgstr "بحث طلب تحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:res.groups,name:ak_material_request.group_user_material_request
|
||||||
|
msgid "Material Request User"
|
||||||
|
msgstr "مستخدم طلبات التحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model,name:ak_material_request.model_transit_location_warning
|
||||||
|
msgid "Material Request: Trasit Location Warning"
|
||||||
|
msgstr "طلب التحويل: تحذير حول موقع الانتظار"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_stock_picking__request_id
|
||||||
|
msgid "Material Requisition"
|
||||||
|
msgstr "طلب التحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_has_error
|
||||||
|
msgid "Message Delivery error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_ids
|
||||||
|
msgid "Messages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__my_activity_date_deadline
|
||||||
|
msgid "My Activity Deadline"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__activity_date_deadline
|
||||||
|
msgid "Next Activity Deadline"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__activity_summary
|
||||||
|
msgid "Next Activity Summary"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__activity_type_id
|
||||||
|
msgid "Next Activity Type"
|
||||||
|
msgstr "نوع النشاط التالي"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields.selection,name:ak_material_request.selection__material_request__delivery_state__process
|
||||||
|
msgid "No Pending Transfers"
|
||||||
|
msgstr "لا يوجد تحويلات معلقة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_needaction_counter
|
||||||
|
msgid "Number of Actions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_has_error_counter
|
||||||
|
msgid "Number of errors"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__message_needaction_counter
|
||||||
|
msgid "Number of messages which requires an action"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__message_has_error_counter
|
||||||
|
msgid "Number of messages with delivery error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__message_unread_counter
|
||||||
|
msgid "Number of unread messages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__picking_count
|
||||||
|
msgid "Picking Count"
|
||||||
|
msgstr "عدد التحويلات"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__picking_two_verify
|
||||||
|
msgid "Picking Two Verify"
|
||||||
|
msgstr "تحقق ثنائى للتحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__picking_type_id
|
||||||
|
msgid "Picking Type"
|
||||||
|
msgstr "نوع العملية"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_form_view
|
||||||
|
msgid "Pickings"
|
||||||
|
msgstr "التحويلات"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: code:addons/ak_material_request/models/material_request.py:0
|
||||||
|
#, python-format
|
||||||
|
msgid "Please create some requisition lines."
|
||||||
|
msgstr "يرجى اضافة بعض بنود للتحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: code:addons/ak_material_request/models/material_request.py:0
|
||||||
|
#, python-format
|
||||||
|
msgid "Please select the location from which you want to transfer the Stock."
|
||||||
|
msgstr "يرجى تحديد الموقع الذي تريد نقل المخزون منه."
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: code:addons/ak_material_request/models/material_request.py:0
|
||||||
|
#, python-format
|
||||||
|
msgid "Please update Deliver Stock From Location."
|
||||||
|
msgstr "يرجى تحديث تسليم المخزون من الموقع."
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__product_id
|
||||||
|
msgid "Product"
|
||||||
|
msgstr "منتج"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__qty
|
||||||
|
msgid "Quantity"
|
||||||
|
msgstr "كمية"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__name
|
||||||
|
msgid "Reference"
|
||||||
|
msgstr "مرجع"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_form_view
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.reject_reason_form_view
|
||||||
|
msgid "Reject"
|
||||||
|
msgstr "رفض"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.actions.act_window,name:ak_material_request.action_reject_material_request_wizard
|
||||||
|
msgid "Reject Material Request Reason"
|
||||||
|
msgstr "سبب رفض طلب التحويل الداخلي"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_reject_reason_wizard__reject_reason
|
||||||
|
msgid "Reject Reason"
|
||||||
|
msgstr "سبب الرفض"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields.selection,name:ak_material_request.selection__material_request__state__reject
|
||||||
|
msgid "Rejected"
|
||||||
|
msgstr "مرفوض"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_search_view
|
||||||
|
msgid "Reqisition Date"
|
||||||
|
msgstr "تاريخ الطلب"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__request_line_ids
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__request_id
|
||||||
|
msgid "Request"
|
||||||
|
msgstr "طلب"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__request_date
|
||||||
|
msgid "Request Date"
|
||||||
|
msgstr "تاريخ الطلب"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__user_id
|
||||||
|
msgid "Requested By"
|
||||||
|
msgstr "الطلب بواسطة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_form_view
|
||||||
|
msgid "Reset to draft"
|
||||||
|
msgstr "إعادة تعيين للمسودة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__activity_user_id
|
||||||
|
msgid "Responsible User"
|
||||||
|
msgstr "المستخدم المسؤول"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_has_sms_error
|
||||||
|
msgid "SMS Delivery error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__state
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_search_view
|
||||||
|
msgid "State"
|
||||||
|
msgstr "الحالة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__activity_state
|
||||||
|
msgid ""
|
||||||
|
"Status based on activities\n"
|
||||||
|
"Overdue: Due date is already passed\n"
|
||||||
|
"Today: Activity date is today\n"
|
||||||
|
"Planned: Future activities."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__location_id
|
||||||
|
msgid "Stock Needed on Location"
|
||||||
|
msgstr "المخزون مطلوب في موقع"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__location_id
|
||||||
|
msgid "Stock needed on Location."
|
||||||
|
msgstr "المخزون مطلوب في موقع"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_form_view
|
||||||
|
msgid "Submit for Approval"
|
||||||
|
msgstr "إرسال للموافقة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: code:addons/ak_material_request/models/material_request.py:0
|
||||||
|
#, python-format
|
||||||
|
msgid "This record can be deleted only in Draft or Rejected state."
|
||||||
|
msgstr "يمكن حذف هذا السجل فقط في حالة المسودة أو الرفض."
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model,name:ak_material_request.model_stock_picking
|
||||||
|
msgid "Transfer"
|
||||||
|
msgstr "التحويل"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields.selection,name:ak_material_request.selection__material_request__delivery_state__pending
|
||||||
|
msgid "Transfer Pending"
|
||||||
|
msgstr "التحويل معلق"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__activity_exception_decoration
|
||||||
|
msgid "Type of the exception activity on record."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request_line__uom_id
|
||||||
|
msgid "Unit of Measure"
|
||||||
|
msgstr "وحدة القياس"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_unread
|
||||||
|
msgid "Unread Messages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__message_unread_counter
|
||||||
|
msgid "Unread Messages Counter"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.inherit_res_config_setting_view
|
||||||
|
msgid ""
|
||||||
|
"Upon enabling this the material request will be navigated via transit "
|
||||||
|
"location."
|
||||||
|
msgstr "عند تفعيل هذا الخيار، سيتم التحويل عبر موقع وسيط"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.material_request_search_view
|
||||||
|
msgid "User"
|
||||||
|
msgstr "المستخدم"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model_terms:ir.ui.view,arch_db:ak_material_request.transit_location_warning_form_view
|
||||||
|
msgid "View Transit Locations"
|
||||||
|
msgstr "عرض المواقع الوسيطة"
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_material_request__website_message_ids
|
||||||
|
msgid "Website Messages"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,help:ak_material_request.field_material_request__website_message_ids
|
||||||
|
msgid "Website communication history"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: ak_material_request
|
||||||
|
#: model:ir.model.fields,field_description:ak_material_request.field_transit_location_warning__name
|
||||||
|
msgid "name"
|
||||||
|
msgstr "اسم"
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from . import stock_picking
|
||||||
|
from . import material_request
|
||||||
|
from . import material_request_line
|
||||||
|
from . import res_config
|
||||||
|
from . import res_company
|
||||||
|
|
@ -0,0 +1,248 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
from datetime import datetime
|
||||||
|
from odoo.exceptions import Warning, UserError, ValidationError
|
||||||
|
|
||||||
|
|
||||||
|
class MaterialRequest(models.Model):
|
||||||
|
_name = "material.request"
|
||||||
|
_description = "Material Request"
|
||||||
|
_inherit = ["mail.thread", "mail.activity.mixin"]
|
||||||
|
_order = "id desc"
|
||||||
|
|
||||||
|
def compute_delivery_state(self):
|
||||||
|
for material_request in self:
|
||||||
|
picking_recs = self.env["stock.picking"].search(
|
||||||
|
[("request_id", "=", material_request.id)]
|
||||||
|
)
|
||||||
|
if picking_recs and all(
|
||||||
|
picking.state in ["done", "cancel"] for picking in picking_recs
|
||||||
|
):
|
||||||
|
material_request.delivery_state = "process"
|
||||||
|
else:
|
||||||
|
material_request.delivery_state = "pending"
|
||||||
|
|
||||||
|
name = fields.Char(
|
||||||
|
string="Reference",
|
||||||
|
index=True,
|
||||||
|
readonly=1,
|
||||||
|
)
|
||||||
|
state = fields.Selection(
|
||||||
|
[
|
||||||
|
("draft", "Draft"),
|
||||||
|
("confirm", "Confirmed"),
|
||||||
|
("approve", "Approved"),
|
||||||
|
("reject", "Rejected"),
|
||||||
|
],
|
||||||
|
tracking=True,
|
||||||
|
default="draft",
|
||||||
|
)
|
||||||
|
user_id = fields.Many2one(
|
||||||
|
"res.users",
|
||||||
|
string="Requested By",
|
||||||
|
default=lambda self: self.env.user and self.env.user.id or False,
|
||||||
|
required=True,
|
||||||
|
domain=lambda self: [
|
||||||
|
("groups_id", "in", [self.env.ref("stock.group_stock_user").id])
|
||||||
|
],
|
||||||
|
)
|
||||||
|
location_id = fields.Many2one(
|
||||||
|
"stock.location",
|
||||||
|
string="Stock Needed on Location",
|
||||||
|
copy=True,
|
||||||
|
help="Stock needed on Location.",
|
||||||
|
)
|
||||||
|
dest_location_id = fields.Many2one(
|
||||||
|
"stock.location",
|
||||||
|
string="Deliver Stock From",
|
||||||
|
copy=False,
|
||||||
|
help="Location from where stock will be delivered.",
|
||||||
|
)
|
||||||
|
request_date = fields.Date(string="Request Date", default=datetime.now().date())
|
||||||
|
request_line_ids = fields.One2many(
|
||||||
|
"material.request.line", "request_id", string="Request", copy=True
|
||||||
|
)
|
||||||
|
picking_type_id = fields.Many2one(
|
||||||
|
"stock.picking.type",
|
||||||
|
string="Picking Type",
|
||||||
|
copy=False,
|
||||||
|
default=lambda self: self.env["stock.picking.type"].search(
|
||||||
|
[("code", "=", "internal")], limit=1
|
||||||
|
),
|
||||||
|
)
|
||||||
|
two_verify = fields.Boolean(string="2 Step Delivery(Via Transit Location)")
|
||||||
|
delivery_state = fields.Selection(
|
||||||
|
[("pending", "Transfer Pending"), ("process", "No Pending Transfers")],
|
||||||
|
tracking=True,
|
||||||
|
default="pending",
|
||||||
|
compute="compute_delivery_state",
|
||||||
|
)
|
||||||
|
good_needed_on = fields.Datetime(
|
||||||
|
string="Goods Needed On",
|
||||||
|
)
|
||||||
|
picking_count = fields.Integer(string="Picking Count", compute="compute_picking")
|
||||||
|
picking_two_verify = fields.Boolean(string="Picking Two Verify")
|
||||||
|
company_id = fields.Many2one(
|
||||||
|
"res.company", "Company", default=lambda self: self.env.company
|
||||||
|
)
|
||||||
|
approved_user_id = fields.Many2one("res.users", copy=False, string="Approved By")
|
||||||
|
|
||||||
|
@api.constrains("dest_location_id")
|
||||||
|
def check_dest_location(self):
|
||||||
|
for material_req_rec in self:
|
||||||
|
if material_req_rec.dest_location_id.id == material_req_rec.location_id.id:
|
||||||
|
raise ValidationError(_("Please update Deliver Stock From Location."))
|
||||||
|
|
||||||
|
def compute_picking(self):
|
||||||
|
"""These method is used for counting the
|
||||||
|
Internal Transfer which is created from the material request."""
|
||||||
|
for material_request_rec in self:
|
||||||
|
material_request_rec.picking_count = self.env["stock.picking"].search_count(
|
||||||
|
[("request_id", "=", material_request_rec.id)]
|
||||||
|
)
|
||||||
|
|
||||||
|
def action_reset_draft(self):
|
||||||
|
for rec in self:
|
||||||
|
rec.write({"state": "draft"})
|
||||||
|
|
||||||
|
@api.onchange("company_id")
|
||||||
|
def _onchange_2_step_delivery(self):
|
||||||
|
for rec in self:
|
||||||
|
if rec.company_id.two_step_material_req:
|
||||||
|
rec.picking_two_verify = True
|
||||||
|
|
||||||
|
def action_confirm(self):
|
||||||
|
for rec in self:
|
||||||
|
rec.write({"state": "confirm"})
|
||||||
|
|
||||||
|
def _prepare_pick_vals(self, req_line=False, picking=False):
|
||||||
|
"""This method is used to create stock moves from picking."""
|
||||||
|
pick_vals = {
|
||||||
|
"product_id": req_line.product_id.id,
|
||||||
|
"product_uom_qty": req_line.qty,
|
||||||
|
"product_uom": req_line.uom_id.id,
|
||||||
|
"location_id": picking.location_id.id,
|
||||||
|
"location_dest_id": picking.location_dest_id.id,
|
||||||
|
"picking_type_id": picking.picking_type_id.id,
|
||||||
|
"picking_id": picking.id,
|
||||||
|
"name": req_line.product_id.display_name,
|
||||||
|
}
|
||||||
|
return pick_vals
|
||||||
|
|
||||||
|
def action_approve(self):
|
||||||
|
"""This method is used to create Internal Transfer."""
|
||||||
|
pick_list_st = []
|
||||||
|
pick_list_td = []
|
||||||
|
stock_move_obj = self.env["stock.move"]
|
||||||
|
for material_req_rec in self:
|
||||||
|
if not material_req_rec.dest_location_id:
|
||||||
|
raise Warning(
|
||||||
|
_(
|
||||||
|
"Please select the location from which you want to transfer the Stock."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if not material_req_rec.request_line_ids:
|
||||||
|
raise Warning(_("Please create some requisition lines."))
|
||||||
|
|
||||||
|
scheduled_date = False
|
||||||
|
picking_vals = {
|
||||||
|
"picking_type_id": material_req_rec.picking_type_id.id,
|
||||||
|
"request_id": material_req_rec.id,
|
||||||
|
"origin": material_req_rec.name,
|
||||||
|
"location_id": material_req_rec.dest_location_id.id,
|
||||||
|
}
|
||||||
|
if material_req_rec.two_verify:
|
||||||
|
# Picking create for two step.
|
||||||
|
transit_location = self.env["stock.location"].search(
|
||||||
|
[("usage", "=", "transit")], limit=1
|
||||||
|
)
|
||||||
|
if not transit_location:
|
||||||
|
return {
|
||||||
|
"type": "ir.actions.act_window",
|
||||||
|
"name": "No Transit Location Warning",
|
||||||
|
"view_mode": "form",
|
||||||
|
"res_model": "transit.location.warning",
|
||||||
|
"context": {
|
||||||
|
"default_name": "No active Tranisit Location found in the system. Please contact the Inventory manager to Unarchive the Transit Location."
|
||||||
|
},
|
||||||
|
"target": "new",
|
||||||
|
}
|
||||||
|
picking_vals.update(
|
||||||
|
{
|
||||||
|
"location_dest_id": transit_location.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
picking_vals.update(
|
||||||
|
{
|
||||||
|
"location_dest_id": material_req_rec.location_id.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
# Created Main picking.
|
||||||
|
main_picking_rec = self.env["stock.picking"].create(picking_vals)
|
||||||
|
|
||||||
|
if material_req_rec.good_needed_on:
|
||||||
|
scheduled_date = material_req_rec.good_needed_on
|
||||||
|
|
||||||
|
if material_req_rec.two_verify:
|
||||||
|
two_step_picking_rec = self.env["stock.picking"].create(
|
||||||
|
{
|
||||||
|
"location_id": transit_location.id,
|
||||||
|
"location_dest_id": material_req_rec.location_id.id,
|
||||||
|
"picking_type_id": material_req_rec.picking_type_id.id,
|
||||||
|
"request_id": material_req_rec.id,
|
||||||
|
"origin": material_req_rec.name,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
for req_line in material_req_rec.request_line_ids:
|
||||||
|
stock_move_vals = material_req_rec._prepare_pick_vals(
|
||||||
|
req_line, main_picking_rec
|
||||||
|
)
|
||||||
|
first_move_rec = stock_move_obj.create(stock_move_vals)
|
||||||
|
main_picking_rec.action_confirm()
|
||||||
|
if material_req_rec.two_verify:
|
||||||
|
two_verify_stock_move_vals = material_req_rec._prepare_pick_vals(
|
||||||
|
req_line, two_step_picking_rec
|
||||||
|
)
|
||||||
|
two_verify_stock_move_vals.update(
|
||||||
|
{"move_orig_ids": [(6, 0, first_move_rec.ids)]}
|
||||||
|
)
|
||||||
|
stock_move_obj.create(two_verify_stock_move_vals)
|
||||||
|
two_step_picking_rec.action_confirm()
|
||||||
|
material_req_rec.write({"state": "approve"})
|
||||||
|
|
||||||
|
def action_reject(self):
|
||||||
|
action = self.env.ref(
|
||||||
|
"ak_material_request.action_reject_material_request_wizard"
|
||||||
|
).read()[0]
|
||||||
|
action["context"] = {"default_material_request_id": self.id}
|
||||||
|
return action
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def create(self, vals):
|
||||||
|
"""seqeunce is created for material request."""
|
||||||
|
name = self.env["ir.sequence"].next_by_code("material.request.seq")
|
||||||
|
vals.update({"name": name})
|
||||||
|
res = super(MaterialRequest, self).create(vals)
|
||||||
|
return res
|
||||||
|
|
||||||
|
def show_picking(self):
|
||||||
|
"""Redirects to the stock picking view."""
|
||||||
|
for rec in self:
|
||||||
|
res = self.env.ref("stock.action_picking_tree_all")
|
||||||
|
res = res.read()[0]
|
||||||
|
res["domain"] = str([("request_id", "=", rec.id)])
|
||||||
|
return res
|
||||||
|
|
||||||
|
def unlink(self):
|
||||||
|
for rec in self:
|
||||||
|
if rec.state not in ["draft", "reject"]:
|
||||||
|
raise UserError(
|
||||||
|
_("This record can be deleted only in Draft or Rejected state.")
|
||||||
|
)
|
||||||
|
return super(MaterialRequest, self).unlink()
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class MaterialRequestLine(models.Model):
|
||||||
|
_name = "material.request.line"
|
||||||
|
_description = "Material Request Lines"
|
||||||
|
|
||||||
|
product_id = fields.Many2one(
|
||||||
|
"product.product",
|
||||||
|
string="Product",
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
description = fields.Char(
|
||||||
|
string="Description",
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
qty = fields.Float(
|
||||||
|
string="Quantity",
|
||||||
|
default=1,
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
available_qty = fields.Float(
|
||||||
|
string="Available Quantity",
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
product_uom_category_id = fields.Many2one(
|
||||||
|
related="product_id.uom_id.category_id", readonly=True
|
||||||
|
)
|
||||||
|
uom_id = fields.Many2one(
|
||||||
|
"uom.uom",
|
||||||
|
string="Unit of Measure",
|
||||||
|
required=True,
|
||||||
|
domain="[('category_id', '=', product_uom_category_id)]",
|
||||||
|
)
|
||||||
|
request_id = fields.Many2one("material.request")
|
||||||
|
|
||||||
|
@api.onchange("product_id")
|
||||||
|
def product_id_change(self):
|
||||||
|
if self.product_id:
|
||||||
|
self.description = self.product_id.name
|
||||||
|
self.uom_id = self.product_id.uom_id
|
||||||
|
available_qty = self.env['stock.quant']._get_available_quantity(self.product_id, self.request_id.dest_location_id)
|
||||||
|
self.available_qty = available_qty
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ResCompany(models.Model):
|
||||||
|
_inherit = "res.company"
|
||||||
|
|
||||||
|
two_step_material_req = fields.Boolean(string="2 step Picking")
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ResConfigSettings(models.TransientModel):
|
||||||
|
_inherit = "res.config.settings"
|
||||||
|
|
||||||
|
two_step_material_req = fields.Boolean(
|
||||||
|
related="company_id.two_step_material_req",
|
||||||
|
readonly=False,
|
||||||
|
string="Allow Material Request in 2-Steps",
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class StockPicking(models.Model):
|
||||||
|
_inherit = "stock.picking"
|
||||||
|
|
||||||
|
request_id = fields.Many2one(
|
||||||
|
"material.request", string="Material Requisition", readonly=True, copy=False
|
||||||
|
)
|
||||||
|
|
||||||
|
def _create_backorder(self):
|
||||||
|
"""
|
||||||
|
Override this method to update material request id in backorder.
|
||||||
|
"""
|
||||||
|
backorder_recs = super(StockPicking, self)._create_backorder()
|
||||||
|
for backorder_rec in backorder_recs:
|
||||||
|
if backorder_rec.backorder_id.request_id:
|
||||||
|
backorder_rec.write(
|
||||||
|
{"request_id": backorder_rec.backorder_id.request_id}
|
||||||
|
)
|
||||||
|
return backorder_recs
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_material_request,access_material_request,model_material_request,,1,1,1,1
|
||||||
|
access_material_request_line,access_material_request_line,model_material_request_line,,1,1,1,1
|
||||||
|
access_reject_reason_wizard,access_reject_reason_wizard,model_reject_reason_wizard,,1,1,1,1
|
||||||
|
access_transit_location_warning,access_transit_location_warning,model_transit_location_warning,,1,1,1,1
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record model="ir.module.category" id="material_request_group">
|
||||||
|
<field name="name">Material Request</field>
|
||||||
|
<field name="description">Material Request</field>
|
||||||
|
</record>
|
||||||
|
<record id="group_user_material_request" model="res.groups">
|
||||||
|
<field name="name">Material Request User</field>
|
||||||
|
<field name="category_id" ref="ak_material_request.material_request_group"/>
|
||||||
|
</record>
|
||||||
|
<record id="group_manager_material_request" model="res.groups">
|
||||||
|
<field name="name">Material Request Manager</field>
|
||||||
|
<field name="category_id" ref="ak_material_request.material_request_group"/>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 159 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 642 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 644 KiB |
|
After Width: | Height: | Size: 586 KiB |
|
After Width: | Height: | Size: 784 KiB |
|
After Width: | Height: | Size: 551 KiB |
|
After Width: | Height: | Size: 643 KiB |
|
After Width: | Height: | Size: 334 KiB |
|
After Width: | Height: | Size: 404 KiB |
|
After Width: | Height: | Size: 646 KiB |
|
After Width: | Height: | Size: 441 KiB |
|
After Width: | Height: | Size: 596 KiB |
|
After Width: | Height: | Size: 434 KiB |
|
After Width: | Height: | Size: 646 KiB |
|
After Width: | Height: | Size: 665 KiB |
|
After Width: | Height: | Size: 698 KiB |
|
After Width: | Height: | Size: 669 KiB |
|
|
@ -0,0 +1,577 @@
|
||||||
|
<div class="container">
|
||||||
|
<div class="oe_styling_v8">
|
||||||
|
<div class="container p-3 mb-3">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 d-lg-flex justify-content-between" style="border-bottom:1px solid #d5d5d5">
|
||||||
|
<div class="my-2 d-flex justify-content-center">
|
||||||
|
<img src="./default_icons/aktiv-logo.png" class="w-auto" style="height:50px !important">
|
||||||
|
</div>
|
||||||
|
<div class="my-2 w-100 w-lg-auto d-md-flex align-items-center justify-content-around justify-content-lg-start">
|
||||||
|
<div class="text-white font-weight-bold text-center"
|
||||||
|
style="background-color:#875A7B !important; padding:5px 15px 8px !important; margin:0 5px 5px 5px !important; border-radius: 15px;">
|
||||||
|
<i class="fa fa-check mr-1"></i>Enterprise
|
||||||
|
</div>
|
||||||
|
<div class="text-white font-weight-bold text-center"
|
||||||
|
style="background-color:#7C7BAD !important; padding:5px 15px 8px !important; margin:0 5px 5px 5px !important; border-radius: 15px;">
|
||||||
|
<i class="fa fa-check mr-1"></i>Community
|
||||||
|
</div>
|
||||||
|
<div class="text-white font-weight-bold text-center"
|
||||||
|
style="background-color:#875A7B !important; padding:5px 15px 8px !important; margin:0 5px 5px 5px !important; border-radius: 15px;">
|
||||||
|
<i class="fa fa-check mr-1"></i>Odoo.Sh
|
||||||
|
</div>
|
||||||
|
<div class="text-white font-weight-bold text-center"
|
||||||
|
style="background-color:#7C7BAD !important; padding:5px 15px 8px !important; margin:0 5px 5px 5px !important; border-radius: 15px;">
|
||||||
|
<i class="fa fa-check mr-1"></i>Self Hosted
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container pt-0 px-4 pb-5">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 bg-white" style="padding:4rem 1rem !important;">
|
||||||
|
<div class="d-md-flex justify-content-center mb-2">
|
||||||
|
<img src="icon.png" class="mx-auto mr-md-2 ml-md-0 mb-2 mb-md-0" height="80px" width="80px">
|
||||||
|
<div>
|
||||||
|
<h1 class="text-center font-weight-bold display-3"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; color: #b01e2f !important">
|
||||||
|
Internal Material Request
|
||||||
|
</h1>
|
||||||
|
<p class="text-center pb-3"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-weight:300 !important; color:#040f3a !important; font-size:1.4rem !important;">
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="material_request.gif" class="img-responsive w-100 h-auto" height="auto">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Demo video link -->
|
||||||
|
<div class="row mb-4 justify-content-center">
|
||||||
|
<a target="_blank" href="https://youtu.be/4wGdpELfAug"
|
||||||
|
style="background-color: #b01e2f !important; color: #fff !important; font-family:'Montserrat', sans-serif !important; font-size:1.4rem; border-radius: 5px; padding: 5px 15px;"
|
||||||
|
class="font-weight-bold">
|
||||||
|
Video Tutorial
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 px-3 text-center">
|
||||||
|
<h2 class="font-weight-bold"
|
||||||
|
style="color: #b01e2f !important; font-family:'Montserrat', sans-serif !important; font-size:2rem;">
|
||||||
|
Explore this module
|
||||||
|
</h2>
|
||||||
|
<div class="mt-3">
|
||||||
|
<a class="font-weight-bold" href="#overview" class="mr-5"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:1.3rem; color:#040f3a !important">Overview
|
||||||
|
<i class="fa fa-chevron-right ml-1" style="color:#282F33 !important"></i></a>
|
||||||
|
<a class="font-weight-bold" href="#features" class="mr-5"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:1.3rem; color:#040f3a !important">Key
|
||||||
|
Features <i class="fa fa-chevron-right ml-1" style="color:#282F33 !important"></i></a>
|
||||||
|
<a class="font-weight-bold" href="#setup" class="mr-5"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:1.3rem; color:#040f3a !important">Setup
|
||||||
|
& Configuration
|
||||||
|
<i class="fa fa-chevron-right ml-1" style="color:#282F33 !important"></i></a>
|
||||||
|
<a class="font-weight-bold" href="#screenshots" class="mr-5"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:1.3rem; color:#040f3a !important">Screenshots
|
||||||
|
<i class="fa fa-chevron-right ml-1" style="color:#282F33 !important"></i></a>
|
||||||
|
</div>
|
||||||
|
<hr class="my-5" style="border-color:d5d5d5 !important">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- OVERVIEW -->
|
||||||
|
<div class="row " id="overview">
|
||||||
|
<div class="col-12 px-4">
|
||||||
|
<h2 class="font-weight-bold"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:2rem; color:#b01e2f !important">
|
||||||
|
Overview
|
||||||
|
</h2>
|
||||||
|
<hr style="border: 2px solid #040f3a !important; background-color: #040f3a !important; width: 50px !important; margin-left: 0 !important; margin-bottom: 2rem !important; margin-top: 8px;">
|
||||||
|
<p class="mt-4"
|
||||||
|
style="font-size:1.1rem !important; color:#282F33 !important; font-weight:400 !important; line-height:1.85 !important">
|
||||||
|
This custom module allows user to generate Internal Material/ Inter-Warehouse Transfer requests.
|
||||||
|
The process could be completed in two ways: </p>
|
||||||
|
<p>1-Step Transfer: Send the stock from source to destination location with manager's approval.</p>
|
||||||
|
<p>2-Step Transfer: Complete the material request transfer from Source to Transit and Transit to
|
||||||
|
Destination location
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- FEATURES -->
|
||||||
|
<!-- FEATURES -->
|
||||||
|
<div class="row my-5" id="features">
|
||||||
|
<div class="col-sm-12 col-md-12 col-lg-12 px-4">
|
||||||
|
<h2 class="font-weight-bold"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:2rem; color:#b01e2f !important">
|
||||||
|
Features
|
||||||
|
</h2>
|
||||||
|
<hr style="border: 2px solid #040f3a !important; background-color: #040f3a !important; width: 50px !important; margin-left: 0 !important; margin-bottom: 2rem !important; margin-top: 8px;">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 col-md-6 my-3" style="border-bottom:2px solid #f0f0f0;">
|
||||||
|
<div class="d-flex" style="padding:1rem 0px !important;">
|
||||||
|
<img src="./default_icons/check.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<h3 style="font-size:1.2rem !important">Make Internal or Inter-warehouse
|
||||||
|
material/transfer requests.</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-12 col-md-6 my-3" style="border-bottom:2px solid #f0f0f0;">
|
||||||
|
<div class="d-flex" style="padding:1rem 0px !important;">
|
||||||
|
<img src="./default_icons/check.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<h3 style="font-size:1.2rem !important">It can be performed in two different
|
||||||
|
ways: 1-step transfer or 2-step transfer as per the suitability.</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 col-md-6 my-3" style="border-bottom:2px solid #f0f0f0;">
|
||||||
|
<div class="d-flex" style="padding:1rem 0px !important;">
|
||||||
|
<img src="./default_icons/check.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<h3 style="font-size:1.2rem !important">Manager requires to approve or
|
||||||
|
disapprove the transfer request.
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-12 col-md-6 my-3" style="border-bottom:2px solid #f0f0f0;">
|
||||||
|
<div class="d-flex" style="padding:1rem 0px !important;">
|
||||||
|
<img src="./default_icons/check.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<h3 style="font-size:1.2rem !important">This app supports Single company Setup
|
||||||
|
with Multi Warehouse and Multi Locations.</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SETUP & CONFIGURATION -->
|
||||||
|
<div class="row mb-5" id="setup">
|
||||||
|
<div class="col-12 px-4">
|
||||||
|
<h2 class="font-weight-bold"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:2rem; color:#b01e2f !important">
|
||||||
|
Setup & Configuration
|
||||||
|
</h2>
|
||||||
|
<hr style="border: 2px solid #040f3a !important; background-color: #040f3a !important; width: 50px !important; margin-left: 0 !important; margin-bottom: 2rem !important; margin-top: 8px;">
|
||||||
|
|
||||||
|
<div class="mt-5">
|
||||||
|
<h2 class="font-weight-bold"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:1.2rem; color:#b01e2f !important">
|
||||||
|
Prerequisites
|
||||||
|
</h2>
|
||||||
|
<ul class="mb-2 pb-2">
|
||||||
|
<li class="p-1" style="border-bottom: 2px solid #f0f0f0;">
|
||||||
|
<h3 style="font-size:1.2rem !important">Required Apps
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
Stock
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SCREENSHOTS -->
|
||||||
|
<div class="row mb-5" id="screenshots">
|
||||||
|
<div class="col-12 px-4">
|
||||||
|
<h2 class="font-weight-bold"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:2rem; color:#b01e2f !important">
|
||||||
|
Screenshots
|
||||||
|
</h2>
|
||||||
|
<hr style="border: 2px solid #040f3a !important; background-color: #040f3a !important; width: 50px !important; margin-left: 0 !important; margin-bottom: 2rem !important; margin-top: 8px;">
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">Internal Material Request
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/menu_1.jpg" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">Material Request Tree View.</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/material_request_tree_2_ss.png" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">Material Request Process:</h3>
|
||||||
|
<ul style="margin-left: 0%; padding-left: 5%;">
|
||||||
|
<li style="margin-right: 4px; color: black; font-size: calc(13px + 0.3vw); text-align: justify;
|
||||||
|
font-family: Times New Roman;">
|
||||||
|
Upon adding details about the source and destination location along with the
|
||||||
|
list of goods user needs to click send the request for approval to manager which
|
||||||
|
when approved will be marked as "Confirmed".
|
||||||
|
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/material_request_form1_3.png" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">Material Request Approve/Reject:
|
||||||
|
</h3>
|
||||||
|
<ul style="margin-left: 0%; padding-left: 5%;">
|
||||||
|
<li style="margin-right: 4px; color: black; font-size: calc(13px + 0.3vw); text-align: justify;
|
||||||
|
font-family: Times New Roman;">
|
||||||
|
Warehouse Manager can approve or reject the material or transfer request made by
|
||||||
|
the
|
||||||
|
user. Whereas they also has the rights to update the source location and product
|
||||||
|
lists.
|
||||||
|
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/material_request_approval_4.jpg" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">If manager rejects the request, mentioning
|
||||||
|
rejection reason is mandatory.
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/reject_reason_5.jpg" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">After rejection from manager users material or
|
||||||
|
transfer request will shift to "Rejected" stage with a log note mentioning the
|
||||||
|
rejection reason.
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/reject_reason_chatter_6.jpg" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">Material Request Picking Process 1-Step
|
||||||
|
Transfer:
|
||||||
|
</h3>
|
||||||
|
<ul style="margin-left: 0%; padding-left: 5%;">
|
||||||
|
<li style="margin-right: 4px; color: black; font-size: calc(13px + 0.3vw); text-align: justify;
|
||||||
|
font-family: Times New Roman;">
|
||||||
|
Once the transfer request is approved by manager, an Internal Transfer is
|
||||||
|
created with correct source and destination locations.
|
||||||
|
</li>
|
||||||
|
<li style="margin-right: 4px; color: black; font-size: calc(13px + 0.3vw); text-align: justify;
|
||||||
|
font-family: Times New Roman;">
|
||||||
|
The Transfer once created is visible in the Form view wherein one can see its
|
||||||
|
current stage through a smart button as shown in the below screenshot.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/picking_button_7.jpg" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">If user follows the 1-Step Transfer, single
|
||||||
|
transfer is created with source and destination locations.
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/transfer_8.jpg" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">Material Request Picking Process 1-Step Material
|
||||||
|
Request Picking- 2-Step Transfer:
|
||||||
|
</h3>
|
||||||
|
<ul style="margin-left: 0%; padding-left: 5%;">
|
||||||
|
<li style="margin-right: 4px; color: black; font-size: calc(13px + 0.3vw); text-align: justify;
|
||||||
|
font-family: Times New Roman;">
|
||||||
|
Before following the 2-step transfer user needs to configure the following:
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/res_config_9.jpg" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-5">
|
||||||
|
<img src="images/two_step_req_10.jpg" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">As seen in the 1-step transfer, everything till
|
||||||
|
the manager approval and creation of
|
||||||
|
single transfer will remain the same for the 2-Step transfer.In the 2-step transfer,
|
||||||
|
the first transfer will occur from source location to transit
|
||||||
|
location and second transfer will occur from transit location to destination
|
||||||
|
location.
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/source_to_transit_12.jpg" class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">Please note, the 2nd Transfer will be in
|
||||||
|
"Waiting for Another Operation" state until the 1st transfer is completed.
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/transit_to_destination_13.jpg"
|
||||||
|
class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">The Transfers are visible in the Form view as
|
||||||
|
well as in the smart button.
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/2_pickings_11.jpg"
|
||||||
|
class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
<div class="mt-5">
|
||||||
|
<div class="d-flex mb-2 pb-2">
|
||||||
|
<img src="./default_icons/arrow.png" width="20px" height="20px" class="mr-2">
|
||||||
|
<div>
|
||||||
|
<h3 style="font-size:1.2rem !important">Pending Transfers Status on the Request Form:
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="images/pending_transfers_14.jpg"
|
||||||
|
class="img-responsive img-thumbnail border">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SCREENSHOTS -->
|
||||||
|
<div class="row mt-3">
|
||||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center" style="padding:2.5rem 15px !important">
|
||||||
|
<h2 class="font-weight-bold" style="font-family:'Montserrat', sans-serif !important; font-size:2rem; color:#b01e2f !important">
|
||||||
|
Suggested Apps
|
||||||
|
</h2>
|
||||||
|
<hr style="border: 2px solid #040f3a !important; background-color: #040f3a !important; width: 50px !important; margin-left: 0 !important; margin-bottom: 2rem !important; margin-top: 8px;">
|
||||||
|
<div id="product_slider" class="row carousel slide mt-4 data-ride=" carousel="">
|
||||||
|
<!-- The slideshow -->
|
||||||
|
<div class="carousel-inner">
|
||||||
|
<div class="carousel-item active" style="min-height: 193.656px;">
|
||||||
|
<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/exchange_rate_management/"
|
||||||
|
target="_blank">
|
||||||
|
<div style="border-radius:10px">
|
||||||
|
<img class="img img-responsive center-block w-100 h-auto"
|
||||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px"
|
||||||
|
src="./suggested_apps/ebchange_banner.jpg">
|
||||||
|
</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/11.0/inventory_scrap_report/"
|
||||||
|
target="_blank">
|
||||||
|
<div style="border-radius:10px">
|
||||||
|
<img class="img img-responsive center-block w-100 h-auto"
|
||||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px"
|
||||||
|
src="./suggested_apps/inventory_scrap_report_banner.jpg">
|
||||||
|
</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/13.0/ak_inventory_valuation_report/"
|
||||||
|
target="_blank">
|
||||||
|
<div style="border-radius:10px">
|
||||||
|
<img class="img img-responsive center-block w-100 h-auto"
|
||||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px"
|
||||||
|
src="./suggested_apps/inventory_valuation_reports_banner-01.jpg">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="carousel-item" style="min-height: 193.656px;">
|
||||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
|
||||||
|
<a href="https://apps.odoo.com/apps/modules/14.0/stock_per_each_location/"
|
||||||
|
target="_blank">
|
||||||
|
<div style="border-radius:10px">
|
||||||
|
<img class="img img-responsive center-block w-100 h-auto"
|
||||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px"
|
||||||
|
src="./suggested_apps/stock_per_each_location_banner-01.jpg">
|
||||||
|
</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/13.0/stock_notify_ept/"
|
||||||
|
target="_blank">
|
||||||
|
<div style="border-radius:10px">
|
||||||
|
<img class="img img-responsive center-block w-100 h-auto"
|
||||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px"
|
||||||
|
src="./suggested_apps/notify_in_stock_banner-01.jpg">
|
||||||
|
</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/13.0/product_sale_target_report/"
|
||||||
|
target="_blank">
|
||||||
|
<div style="border-radius:10px">
|
||||||
|
<img class="img img-responsive center-block w-100 h-auto"
|
||||||
|
style="border-top-left-radius:10px; border-top-right-radius:10px"
|
||||||
|
src="./suggested_apps/product_ageing_report_banner-01.jpg">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Left and right controls -->
|
||||||
|
<a class="carousel-control-prev" href="#product_slider" data-slide="prev" style="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="#product_slider" data-slide="next" style="width:35px; color:#000">
|
||||||
|
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- END OF SUGGESTED PRODUCTS -->
|
||||||
|
|
||||||
|
<!-- OUR SERVICES -->
|
||||||
|
<section style="margin-top:2rem !important">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<h2 class="font-weight-bold"
|
||||||
|
style="font-family:'Montserrat', sans-serif !important; font-size:2rem; color:#b01e2f !important">
|
||||||
|
Our Services
|
||||||
|
</h2>
|
||||||
|
<hr style="border: 2px solid #040f3a !important; background-color: #040f3a !important; width: 50px !important; margin-left: 0 !important; margin-bottom: 2rem !important; margin-top: 8px;">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-6 col-12 d-flex flex-column justify-content-center align-items-center my-4">
|
||||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
<img src="./default_icons/Odoo_Consulting.png" class="img-responsive"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
</div>
|
||||||
|
<h6 class="text-center"
|
||||||
|
style="font-family:Montserrat, 'sans-serif' !important; font-weight:bold">
|
||||||
|
Odoo
|
||||||
|
Consulting
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-6 col-12 d-flex flex-column justify-content-center align-items-center my-4">
|
||||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
<img src="./default_icons/Odoo_Customization.png" class="img-responsive"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
</div>
|
||||||
|
<h6 class="text-center"
|
||||||
|
style="font-family:Montserrat, 'sans-serif' !important; font-weight:bold">
|
||||||
|
Odoo
|
||||||
|
Customization
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-6 col-12 d-flex flex-column justify-content-center align-items-center my-4">
|
||||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
<img src="./default_icons/Odoo_Implementation.png" class="img-responsive"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
</div>
|
||||||
|
<h6 class="text-center"
|
||||||
|
style="font-family:Montserrat, 'sans-serif' !important; font-weight:bold">
|
||||||
|
Odoo
|
||||||
|
Implementation
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-6 col-12 d-flex flex-column justify-content-center align-items-center my-4">
|
||||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
<img src="./default_icons/Odoo_Integration.png" class="img-responsive"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
</div>
|
||||||
|
<h6 class="text-center"
|
||||||
|
style="font-family:Montserrat, 'sans-serif' !important; font-weight:bold">
|
||||||
|
Odoo
|
||||||
|
Integration
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-6 col-12 d-flex flex-column justify-content-center align-items-center my-4">
|
||||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
<img src="./default_icons/Odoo_Migration.png" class="img-responsive"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
</div>
|
||||||
|
<h6 class="text-center"
|
||||||
|
style="font-family:Montserrat, 'sans-serif' !important; font-weight:bold">
|
||||||
|
Odoo
|
||||||
|
Migration
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4 col-sm-6 col-12 d-flex flex-column justify-content-center align-items-center my-4">
|
||||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
<img src="./default_icons/Odoo_Support.png" class="img-responsive"
|
||||||
|
style="border-radius:15px !important; height:80px; width:80px">
|
||||||
|
</div>
|
||||||
|
<h6 class="text-center"
|
||||||
|
style="font-family:Montserrat, 'sans-serif' !important; font-weight:bold">
|
||||||
|
Odoo
|
||||||
|
Support
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!-- END OF END OF OUR SERVICES -->
|
||||||
|
<!-- FOOTER -->
|
||||||
|
<!-- Don't Remove Below Part -->
|
||||||
|
<div>
|
||||||
|
<h2 class="oe_slogan">
|
||||||
|
<a href="http://aktivsoftware.com/" target="new">
|
||||||
|
<img src="./default_icons/aktiv-logo.png" class="img img-responsive"/>
|
||||||
|
</a>
|
||||||
|
<br/>
|
||||||
|
<a href="mailto:sales@aktivsoftware.com" style="color: #000000 !important;">
|
||||||
|
Get Help & Support
|
||||||
|
</a>
|
||||||
|
</h2>
|
||||||
|
<div class="oe_slogan oe_spaced text-center">
|
||||||
|
<a class="btn btn success mt8" title="website" target="new"
|
||||||
|
style="background-color: #b01e2f !important; border-radius: 5px !important; color: #ffffff; !important; position:relative; overflow: hidden;"
|
||||||
|
href="http://aktivsoftware.com/"><b>Website</b></a>
|
||||||
|
<a class="btn btn success mt8" title="Contact Us"
|
||||||
|
style="background-color: #b01e2f !important; border-radius: 5px !important; color: #ffffff; !important; position:relative; overflow: hidden;"
|
||||||
|
href="mailto:sales@aktivsoftware.com"><b>Contact Us</b></a>
|
||||||
|
<a class="btn btn success mt8" title="Request New Features Now!"
|
||||||
|
style="background-color: #b01e2f !important; border-radius: 5px !important; color: #ffffff; !important; position:relative; overflow: hidden;"
|
||||||
|
href="mailto:sales@aktivsoftware.com"><b>Request For New Features</b></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- END OF FOOTER -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
After Width: | Height: | Size: 369 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
|
@ -0,0 +1,142 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="material_request_form_view" model="ir.ui.view">
|
||||||
|
<field name="name">material.request.form.view</field>
|
||||||
|
<field name="model">material.request</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form>
|
||||||
|
<header>
|
||||||
|
<button name="action_confirm" type="object" string="Submit for Approval" class="btn-primary"
|
||||||
|
attrs="{'invisible': [('state', 'in', ['confirm','approve','reject'])]}"/>
|
||||||
|
<button name="action_approve" type="object" string="Approve" class="btn-primary"
|
||||||
|
attrs="{'invisible': [('state', 'in', ['draft','approve','reject'])]}"
|
||||||
|
groups="ak_material_request.group_manager_material_request"/>
|
||||||
|
<button name="action_reject" type="object" string="Reject" class="btn-primary"
|
||||||
|
attrs="{'invisible': [('state', 'in', ['draft','approve','reject'])]}"
|
||||||
|
groups="ak_material_request.group_manager_material_request"/>
|
||||||
|
<button name="action_reset_draft" type="object" string="Reset to draft" class="btn-primary"
|
||||||
|
attrs="{'invisible': [('state', 'in', ['approve', 'confirm','draft'])]}"/>
|
||||||
|
<field name="delivery_state" widget="statusbar" attrs="{'invisible': [('state', 'in', ['draft', 'reject'])]}"/>
|
||||||
|
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,approve"/>
|
||||||
|
</header>
|
||||||
|
<sheet>
|
||||||
|
<div class="oe_button_box" name="button_box">
|
||||||
|
<button class="oe_stat_button" type="object" icon="fa-truck"
|
||||||
|
name="show_picking"
|
||||||
|
attrs="{'invisible': [('state', 'not in', ['approve'])]}">
|
||||||
|
<field name="picking_count" widget="statinfo" string="Pickings"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="oe_title">
|
||||||
|
<div class="oe_title">
|
||||||
|
<h1>
|
||||||
|
<field name="name"/>
|
||||||
|
<br/>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="user_id" readonly="1" force_save="1"/>
|
||||||
|
<field name="location_id" required="1"
|
||||||
|
domain="[('usage', '=', 'internal')]"
|
||||||
|
attrs="{'readonly': [('state', '!=', 'draft')]}"
|
||||||
|
options="{'no_create': True}"/>
|
||||||
|
<field name="dest_location_id"
|
||||||
|
domain="[('usage', '=', 'internal')]"
|
||||||
|
attrs="{'readonly': [('state', 'in', ['approve', 'reject'])]}"
|
||||||
|
options="{'no_create': True}"/>
|
||||||
|
<field name="picking_type_id" required="1" domain="[('code', '=', 'internal')]"
|
||||||
|
attrs="{'readonly': [('state', '!=', 'draft')]}" options="{'no_create': True}"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="request_date" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
|
||||||
|
<field name="good_needed_on" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
|
||||||
|
<field name="two_verify" attrs="{'invisible': [('picking_two_verify', '=', False)], 'readonly': [('state', '!=', 'draft')]}"/>
|
||||||
|
<field name="picking_two_verify" invisible="1"/>
|
||||||
|
<field name="company_id" groups="base.group_multi_company"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
<notebook>
|
||||||
|
<page string="Material Lines">
|
||||||
|
<field name="request_line_ids" attrs="{'readonly': [('state', 'in', ['approve', 'reject'])], 'required': [('state', '=', 'confirm')]}">
|
||||||
|
<tree editable="bottom">
|
||||||
|
<field name="product_id" options="{'no_create': True}"/>
|
||||||
|
<field name="product_uom_category_id" invisible="1"/>
|
||||||
|
<field name="description"/>
|
||||||
|
<field name="available_qty"/>
|
||||||
|
<field name="qty"/>
|
||||||
|
<field name="uom_id" groups="uom.group_uom" options="{'no_create': True}"/>
|
||||||
|
</tree>
|
||||||
|
<form>
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="product_id" options="{'no_create': True}"/>
|
||||||
|
<field name="description"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="qty"/>
|
||||||
|
<field name="product_uom_category_id" invisible="1"/>
|
||||||
|
<field name="uom_id" groups="uom.group_uom" options="{'no_create': True}"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
|
</notebook>
|
||||||
|
</sheet>
|
||||||
|
<div class="oe_chatter">
|
||||||
|
<field name="message_follower_ids" widget="mail_followers"/>
|
||||||
|
<field name="message_ids" widget="mail_thread"/>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="material_request_tree_view" model="ir.ui.view">
|
||||||
|
<field name="name">material.request.view.tree</field>
|
||||||
|
<field name="model">material.request</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="user_id"/>
|
||||||
|
<field name="location_id"/>
|
||||||
|
<field name="dest_location_id"/>
|
||||||
|
<field name="request_date"/>
|
||||||
|
<field name="state"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="material_request_search_view" model="ir.ui.view">
|
||||||
|
<field name="name">material.request.search</field>
|
||||||
|
<field name="model">material.request</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<search string="Material Request Search">
|
||||||
|
<field name="user_id"/>
|
||||||
|
<field name="request_date"/>
|
||||||
|
<field name="location_id"/>
|
||||||
|
<field name="dest_location_id"/>
|
||||||
|
<field name="state"/>
|
||||||
|
<group expand="0" string="Group By">
|
||||||
|
<filter string="User" name="user_id" context="{'group_by':'user_id'}"/>
|
||||||
|
<filter string="Reqisition Date" name="request_date" context="{'group_by':'request_date'}"/>
|
||||||
|
<filter string="Location" name="location" context="{'group_by':'location_id'}"/>
|
||||||
|
<filter string="Destination Location" name="dest_location_id"
|
||||||
|
context="{'group_by':'dest_location_id'}"/>
|
||||||
|
<filter string="State" name="state" context="{'group_by':'state'}"/>
|
||||||
|
</group>
|
||||||
|
</search>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.actions.act_window" id="action_material_request">
|
||||||
|
<field name="name">Internal Material Request</field>
|
||||||
|
<field name="res_model">material.request</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="menu_action_material_request" name="Internal Material Request" parent="stock.menu_stock_warehouse_mgmt"
|
||||||
|
action="action_material_request"/>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_company_form_inherit_material_req" model="ir.ui.view">
|
||||||
|
<field name="model">res.company</field>
|
||||||
|
<field name="inherit_id" ref="base.view_company_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='partner_id']" position="after">
|
||||||
|
<field name="two_step_material_req" invisible="1"/>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="inherit_res_config_setting_view" model="ir.ui.view">
|
||||||
|
<field name="name">res.config.settings.view</field>
|
||||||
|
<field name="model">res.config.settings</field>
|
||||||
|
<field name="inherit_id" ref="stock.res_config_settings_view_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//div[@data-key='stock']" position="inside">
|
||||||
|
<h2>Internal Material Request</h2>
|
||||||
|
<div class="row mt16 o_settings_container">
|
||||||
|
<div class="col-12 col-lg-6 o_setting_box">
|
||||||
|
<div class="o_setting_left_pane">
|
||||||
|
<field name="two_step_material_req"/>
|
||||||
|
</div>
|
||||||
|
<div class="o_setting_right_pane">
|
||||||
|
<label for="two_step_material_req"/>
|
||||||
|
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific."/>
|
||||||
|
<div class="text-muted">
|
||||||
|
Upon enabling this the material request will be navigated via transit location.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from . import reject_reason_wizard
|
||||||
|
from . import transit_location_warning
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class RejectReasonWizard(models.TransientModel):
|
||||||
|
_name = "reject.reason.wizard"
|
||||||
|
_description = "Material Request Reject Reason Wizard"
|
||||||
|
|
||||||
|
reject_reason = fields.Text(string="Reject Reason", required=True)
|
||||||
|
material_request_id = fields.Many2one("material.request", string="Material Request")
|
||||||
|
|
||||||
|
def reject_material_req(self):
|
||||||
|
self.material_request_id.write(
|
||||||
|
{
|
||||||
|
"state": "reject",
|
||||||
|
"delivery_state": "",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
display_msg = (
|
||||||
|
"<p> User %s Rejected the material request.<br/>"
|
||||||
|
"Rejected Reason: %s </p>" % (self.env.user.name, self.reject_reason)
|
||||||
|
)
|
||||||
|
self.material_request_id.message_post(body=display_msg)
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="reject_reason_form_view" model="ir.ui.view">
|
||||||
|
<field name="model">reject.reason.wizard</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form>
|
||||||
|
<field name="material_request_id" invisible="1"/>
|
||||||
|
<field name="reject_reason" nolabel="1"/>
|
||||||
|
<footer>
|
||||||
|
<button name="reject_material_req" string="Reject" type="object" class="btn-primary"/>
|
||||||
|
<button name="cancel" special="cancel" string="Cancel"/>
|
||||||
|
</footer>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.actions.act_window" id="action_reject_material_request_wizard">
|
||||||
|
<field name="name">Reject Material Request Reason</field>
|
||||||
|
<field name="res_model">reject.reason.wizard</field>
|
||||||
|
<field name="view_mode">form</field>
|
||||||
|
<field name="target">new</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo, Aktiv Software PVT. LTD.
|
||||||
|
# See LICENSE file for full copyright & licensing details.
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class TransitLocationWarning(models.TransientModel):
|
||||||
|
_name = "transit.location.warning"
|
||||||
|
_description = "Material Request: Trasit Location Warning"
|
||||||
|
|
||||||
|
name = fields.Char(string="name")
|
||||||
|
|
||||||
|
def view_transit_location(self):
|
||||||
|
return {
|
||||||
|
"type": "ir.actions.act_window",
|
||||||
|
"name": "Locations",
|
||||||
|
"view_mode": "tree,form",
|
||||||
|
"res_model": "stock.location",
|
||||||
|
"domain": [("usage", "=", "transit"), ("active", "=", False)],
|
||||||
|
"context": {"default_usage": "transit"},
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="transit_location_warning_form_view" model="ir.ui.view">
|
||||||
|
<field name="model">transit.location.warning</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form>
|
||||||
|
<field name="name" nolabel="1" readonly="1"/>
|
||||||
|
<footer>
|
||||||
|
<button name="view_transit_location" string="View Transit Locations" type="object" class="btn-primary"/>
|
||||||
|
<button name="cancel" special="cancel" string="Cancel"/>
|
||||||
|
</footer>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
=================================
|
||||||
|
Restriction on Stock Location
|
||||||
|
=================================
|
||||||
|
This app will restrict stock location for selected users.
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
from . import models
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"name": "Restriction on Stock Location",
|
||||||
|
|
||||||
|
'version': "14.0",
|
||||||
|
|
||||||
|
'category': 'Odex25-Inventory/Odex25-Inventory',
|
||||||
|
"summary": "This app will Restriction on Stock Location.",
|
||||||
|
|
||||||
|
'author': 'INKERP',
|
||||||
|
|
||||||
|
'website': "http://www.inkerp.com",
|
||||||
|
|
||||||
|
"depends": ['stock'],
|
||||||
|
|
||||||
|
"data": [
|
||||||
|
"security/security.xml",
|
||||||
|
"views/stock_location_view.xml",
|
||||||
|
],
|
||||||
|
|
||||||
|
'images': ['static/description/banner.png'],
|
||||||
|
'license': "OPL-1",
|
||||||
|
'installable': True,
|
||||||
|
'application': True,
|
||||||
|
'auto_install': False,
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
from. import stock_location
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
from odoo import fields, models, api, _
|
||||||
|
|
||||||
|
|
||||||
|
class StockLocation(models.Model):
|
||||||
|
_inherit = 'stock.location'
|
||||||
|
|
||||||
|
user_ids = fields.Many2many(comodel_name='res.users', string='Users')
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="group_stock_location_restrict_manager" model="res.groups">
|
||||||
|
<field name="name">Stock Location Restriction</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="stock_location_restriction_for_users" model="ir.rule">
|
||||||
|
<field name="name">Restrict Stock Location</field>
|
||||||
|
<field ref="model_stock_location" name="model_id"/>
|
||||||
|
<field name="domain_force">[('user_ids','!=',user.id)]</field>
|
||||||
|
<field name="groups" eval="[(4, ref('eg_stock_location_restriction.group_stock_location_restrict_manager'))]"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
|
@ -0,0 +1,392 @@
|
||||||
|
<!--Heading Start-->
|
||||||
|
|
||||||
|
<section class="mb16">
|
||||||
|
<h2 class="oe_slogan" style="color:#008784;font-size: 50px;">Restriction on Stock Location</h2>
|
||||||
|
<p class="oe_mt32"
|
||||||
|
style="font-size: 20px; line-height: 1.2; word-break: break-word; text-align: center; mso-line-height-alt: 22px; margin: 0;">This app will restrict stock location for selected users.</p>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
</section>
|
||||||
|
<!--Heading End-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--#########=============================================########-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--Divider 3PX 25% Start -->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center>
|
||||||
|
<img class="oe_picture" src="divider.png"
|
||||||
|
style="margin: 0 0 50px 0;display: block;border: none;height: 3px;background: #0071B9; width:25%;"/>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Divider 3PX End -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--Company LOGO Start-->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center>
|
||||||
|
<img class="oe_picture" src="company_logo.png" style="margin-bottom:3.33%" width="225px"/>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Company LOGO end-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--Support Button Start-->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center class="oe_slogan">
|
||||||
|
<a href="mailto:team@inkerp.com?subject=Odoo Support / Development&body="
|
||||||
|
style="background:linear-gradient(to bottom, #000000 5%, #000000 100%);
|
||||||
|
border-radius:42px;
|
||||||
|
display:inline-block;
|
||||||
|
cursor:pointer;
|
||||||
|
color:#ffffff;
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-size:23px;
|
||||||
|
padding:10px 33px;
|
||||||
|
background-color:black;
|
||||||
|
text-decoration:none;
|
||||||
|
border-radius: 45px;
|
||||||
|
|
||||||
|
"><i class="fa fa-envelope"></i> Looking for Demo or Support?</a>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Support Button End-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!--Divider 3PX 25% Start -->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center>
|
||||||
|
<img class="oe_picture" src="divider.png"
|
||||||
|
style="margin: 0 0 50px 0;display: block;border: none;height: 3px;background: #0071B9; width:25%;"/>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--ScreenShot Section Start-->
|
||||||
|
<section class="container">
|
||||||
|
<div class="oe_row oe_spaced">
|
||||||
|
<h2 class="oe_slogan" style="font-size:28px"><b>1) Users view. </b></h2>
|
||||||
|
<div>
|
||||||
|
<h2 class="oe_slogan" style="font-size:22px;"> For Applying Restriction user have to assign group of (Stock Location Restriction) to User. so that assigned user can restrict the other user.</h2>
|
||||||
|
<h2 class="oe_slogan" style="font-size:22px"><b>Navigation:</b> Settings -> Users & Companies -> Users -> Stock Location Restriction</h2>
|
||||||
|
</div>
|
||||||
|
<div class="mt16 mb16">
|
||||||
|
<img src="images/1.png" class="img img-responsive center-block"
|
||||||
|
style="max-width:100%;border:8px solid lightgray;"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--ScreenShot Section End-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--#########=============================================########-->
|
||||||
|
|
||||||
|
<!--ScreenShot Section Start-->
|
||||||
|
|
||||||
|
<!--Divider 3PX Start -->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center>
|
||||||
|
<img src="divider.png"
|
||||||
|
style="margin: 0 0 50px 0;display: block;border: none;height: 3px;background: #0071B9; width:60%;"/>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Divider 3PX End -->
|
||||||
|
<!--ScreenShot Section Start-->
|
||||||
|
<section class="container">
|
||||||
|
<div class="oe_row oe_spaced">
|
||||||
|
<h2 class="oe_slogan" style="font-size:28px"><b>2) Locations view.</b></h2>
|
||||||
|
<div>
|
||||||
|
<h2 class="oe_slogan" style="font-size:22px;">In Stock Location form view restrict manager can see Users field. In that field select that users whom you want restrict from the this particular Stock Location.</h2>
|
||||||
|
<h2 class="oe_slogan" style="font-size:22px"><b>Navigation:</b> Inventory -> Reporting ->Locations</h2>
|
||||||
|
</div>
|
||||||
|
<div class="mt16 mb16">
|
||||||
|
<img src="images/2.png" class="img img-responsive center-block"
|
||||||
|
style="max-width:100%;border:8px solid lightgray;"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--ScreenShot Section End-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--#########=============================================########-->
|
||||||
|
<!--#########=============================================########-->
|
||||||
|
|
||||||
|
<!--ScreenShot Section Start-->
|
||||||
|
|
||||||
|
<!--Divider 3PX Start -->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center>
|
||||||
|
<img src="divider.png"
|
||||||
|
style="margin: 0 0 50px 0;display: block;border: none;height: 3px;background: #0071B9; width:60%;"/>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Divider 3PX End -->
|
||||||
|
<!--ScreenShot Section Start-->
|
||||||
|
<section class="container">
|
||||||
|
<div class="oe_row oe_spaced">
|
||||||
|
<h2 class="oe_slogan" style="font-size:28px"><b>3) Locations view.</b></h2>
|
||||||
|
<div>
|
||||||
|
<h2 class="oe_slogan" style="font-size:22px;">Here you can see that stock location was disappear from records. The location was restricted for Marc Demo.</h2>
|
||||||
|
<h2 class="oe_slogan" style="font-size:22px"><b>Navigation:</b> Inventory -> Reporting ->Locations</h2>
|
||||||
|
</div>
|
||||||
|
<div class="mt16 mb16">
|
||||||
|
<img src="images/3.png" class="img img-responsive center-block"
|
||||||
|
style="max-width:100%;border:8px solid lightgray;"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--ScreenShot Section End-->
|
||||||
|
|
||||||
|
<!--#########=============================================########-->
|
||||||
|
<!--######################################################################################-->
|
||||||
|
<!--############################# FOOTER START ###############################-->
|
||||||
|
<!--######################################################################################-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--Divider 3PX Start -->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center>
|
||||||
|
<img src="divider.png"
|
||||||
|
style="margin: 0 0 50px 0;display: block;border: none;height: 3px;background: #0071B9; width:100%;"/>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Divider 3PX End -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--#########=============================================########-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--Featured APP section Start-->
|
||||||
|
<section class="oe_container">
|
||||||
|
|
||||||
|
|
||||||
|
<h2 class="oe_slogan">Featured Applications</h2>
|
||||||
|
|
||||||
|
<div id="demo" class="row carousel slide 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://www.odoo.com/apps/modules/13.0/eg_cancel_quotation/" target="_blank">
|
||||||
|
<div style="border-radius: 10px;">
|
||||||
|
<img class="img img-responsive center-block"
|
||||||
|
style="border-radius: 10px;"
|
||||||
|
src="eg_cancel_quotation.png">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||||
|
<a href="https://www.odoo.com/apps/modules/13.0/eg_merge_purchase_order/" target="_blank">
|
||||||
|
<div style="border-radius: 10px;">
|
||||||
|
<img class="img img-responsive center-block"
|
||||||
|
style="border-radius: 10px;"
|
||||||
|
src="eg_merge_purchase_order.png">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||||
|
<a href="https://www.odoo.com/apps/modules/13.0/eg_inventory_user_signature_report/"
|
||||||
|
target="_blank">
|
||||||
|
<div style="border-radius: 10px;">
|
||||||
|
<img class="img img-responsive center-block"
|
||||||
|
style="border-radius: 10px;"
|
||||||
|
src="eg_inventory_user_signature_report.png">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="carousel-item" style="min-height: 0px;">
|
||||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||||
|
<a href="https://apps.odoo.com/apps/modules/13.0/eg_po_from_so/" target="_blank">
|
||||||
|
<div style="border-radius: 10px;">
|
||||||
|
<img class="img img-responsive center-block"
|
||||||
|
style="border-radius: 10px;"
|
||||||
|
src="eg_po_from_so.png">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||||
|
<a href="https://www.odoo.com/apps/modules/13.0/eg_sendcloud_delivery/" target="_blank">
|
||||||
|
<div style="border-radius: 10px;">
|
||||||
|
<img class="img img-responsive center-block"
|
||||||
|
style="border-radius: 10px;"
|
||||||
|
src="eg_sendcloud_delivery.png">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||||
|
<a href="https://www.odoo.com/apps/modules/13.0/eg_product_sale_price_history/" target="_blank">
|
||||||
|
<div style="border-radius: 10px;">
|
||||||
|
<img class="img img-responsive center-block"
|
||||||
|
style="border-radius: 10px;"
|
||||||
|
src="eg_product_sale_price_history.png">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="carousel-item" style="min-height: 0px;">
|
||||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||||
|
<a href="https://www.odoo.com/apps/modules/13.0/eg_split_quotation_order/" target="_blank">
|
||||||
|
<div style="border-radius: 10px;">
|
||||||
|
<img class="img img-responsive center-block"
|
||||||
|
style="border-radius: 10px;"
|
||||||
|
src="eg_split_quotation_order.png">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||||
|
<a href="https://www.odoo.com/apps/modules/13.0/eg_whatsapp_all_in_one_integration/"
|
||||||
|
target="_blank">
|
||||||
|
<div style="border-radius: 10px;">
|
||||||
|
<img class="img img-responsive center-block"
|
||||||
|
style="border-radius: 10px;"
|
||||||
|
src="eg_whatsapp_all_in_one_integration.png">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float: left;">
|
||||||
|
<a href="https://www.odoo.com/apps/modules/13.0/eg_whatsapp_sale_integration/" target="_blank">
|
||||||
|
<div style="border-radius: 10px;">
|
||||||
|
<img class="img img-responsive center-block"
|
||||||
|
style="border-radius: 10px;"
|
||||||
|
src="eg_whatsapp_sale_integration.png">
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Left and right controls -->
|
||||||
|
<a class="carousel-control-prev" href="#demo" data-slide="prev" style="left:-25px;width: 0px;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: 0px;color: #000;">
|
||||||
|
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--Featured App End-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--#########=============================================########-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--Divider 3PX Start -->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center>
|
||||||
|
<img src="divider.png"
|
||||||
|
style="margin: 0 0 50px 0;display: block;border: none;height: 3px;background: #0071B9; width:100%;"/>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Divider 3PX End -->
|
||||||
|
|
||||||
|
<!--Our Services Start-->
|
||||||
|
<section class="mb64">
|
||||||
|
|
||||||
|
<h2 class="oe_slogan" style="font-variant: initial;">Our Services</h2>
|
||||||
|
<center>
|
||||||
|
<table style="table-layout: fixed ; width: 100% ; height:100%;
|
||||||
|
font-size:20px;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="background-color:black; border: 3px solid white;">
|
||||||
|
<a href="mailto:team@inkerp.com?subject=Odoo Support / Development&body="
|
||||||
|
style="width:100%;display:inline-block;cursor:pointer;color:#ffffff;padding:10px 20px;
|
||||||
|
text-decoration:none; font-family: 'Roboto', sans-serif;"><i class="fa fa-envelope"></i>
|
||||||
|
Odoo Implementation</a>
|
||||||
|
</td>
|
||||||
|
<td style="background-color:black; border: 3px solid white;">
|
||||||
|
<a href="mailto:team@inkerp.com?subject=Odoo Support / Development&body="
|
||||||
|
style="width:100%;display:inline-block;cursor:pointer;color:#ffffff;padding:10px 20px;
|
||||||
|
text-decoration:none; font-family: 'Roboto', sans-serif;"><i class="fa fa-envelope"></i>
|
||||||
|
Odoo App Development</a>
|
||||||
|
</td>
|
||||||
|
<td style="background-color:black; border: 3px solid white;">
|
||||||
|
<a href="mailto:team@inkerp.com?subject=Odoo Support / Development&body="
|
||||||
|
style="width:100%;display:inline-block;cursor:pointer;color:#ffffff;padding:10px 20px;
|
||||||
|
text-decoration:none; font-family: 'Roboto', sans-serif;"><i class="fa fa-envelope"></i>
|
||||||
|
Odoo Support & Maintenance</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="background-color:black; border: 3px solid white;">
|
||||||
|
<a href="mailto:team@inkerp.com?subject=Odoo Support / Development&body="
|
||||||
|
style="width:100%;display:inline-block;cursor:pointer;color:#ffffff;padding:10px 20px;
|
||||||
|
text-decoration:none; font-family: 'Roboto', sans-serif;"><i class="fa fa-envelope"></i>
|
||||||
|
Odoo Customization</a>
|
||||||
|
</td>
|
||||||
|
<td style="background-color:black; border: 3px solid white;">
|
||||||
|
<a href="mailto:team@inkerp.com?subject=Odoo Support / Development&body="
|
||||||
|
style="width:100%;display:inline-block;cursor:pointer;color:#ffffff;padding:10px 20px;
|
||||||
|
text-decoration:none; font-family: 'Roboto', sans-serif;"><i class="fa fa-envelope"></i>
|
||||||
|
Odoo Integration Services</a>
|
||||||
|
</td>
|
||||||
|
<td style="background-color:black; border: 3px solid white;">
|
||||||
|
<a href="mailto:team@inkerp.com?subject=Odoo Support / Development&body="
|
||||||
|
style="width:100%;display:inline-block;cursor:pointer;color:#ffffff;padding:10px 20px;
|
||||||
|
text-decoration:none; font-family: 'Roboto', sans-serif;"><i class="fa fa-envelope"></i>
|
||||||
|
Odoo Developer Outsourcing</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Our Services end-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--Divider 3PX 25% Start -->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center>
|
||||||
|
<img src="divider.png"
|
||||||
|
style="margin: 0 0 50px 0;display: block;border: none;height: 3px;background: #0071B9; width:25%;"/>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Divider 3PX End -->
|
||||||
|
|
||||||
|
|
||||||
|
<!--Support Button Start-->
|
||||||
|
<section class="mb64">
|
||||||
|
<center class="oe_slogan">
|
||||||
|
<a href="mailto:team@inkerp.com?subject=Odoo Support / Development&body="
|
||||||
|
style="
|
||||||
|
border-radius:42px;
|
||||||
|
display:inline-block;
|
||||||
|
cursor:pointer;
|
||||||
|
color:#ffffff;
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-size:23px;
|
||||||
|
padding:10px 33px;
|
||||||
|
background-color:black;
|
||||||
|
text-decoration:none;
|
||||||
|
border-radius: 45px;
|
||||||
|
"><i class="fa fa-envelope"></i> team@inkerp.com</a>
|
||||||
|
<a href="skype:live:.cid.4c02945aa38b9250?chat"
|
||||||
|
style="
|
||||||
|
border-radius:42px;
|
||||||
|
display:inline-block;
|
||||||
|
cursor:pointer;
|
||||||
|
color:#ffffff;
|
||||||
|
font-family: 'Roboto', sans-serif;
|
||||||
|
font-size:23px;
|
||||||
|
padding:10px 33px;
|
||||||
|
background-color:black;
|
||||||
|
text-decoration:none;
|
||||||
|
border-radius: 45px;
|
||||||
|
"><i class="fa fa-skype"></i> team@inkerp.com</a>
|
||||||
|
</center>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<!--Support Button End-->
|
||||||
|
|
||||||
|
<!--Company LOGO Start-->
|
||||||
|
<section class="oe_container">
|
||||||
|
<center>
|
||||||
|
<img class="oe_picture" src="company_logo.png" style="margin-bottom:3.33%" width="225px"/>
|
||||||
|
</center>
|
||||||
|
</section>
|
||||||
|
<!--Company LOGO end-->
|
||||||
|
|
||||||
|
<!--######################################################################################-->
|
||||||
|
<!--############################# FOOTER END ###############################-->
|
||||||
|
<!--######################################################################################-->
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
<odoo>
|
||||||
|
<record id="restriction_stock_location_form_view_inherited" model="ir.ui.view">
|
||||||
|
<field name="name">stock.location.restriction.form.view</field>
|
||||||
|
<field name="model">stock.location</field>
|
||||||
|
<field name="inherit_id" ref="stock.view_location_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='comment']" position="after">
|
||||||
|
<separator string="User Rights"/>
|
||||||
|
<group>
|
||||||
|
<field name="user_ids" widget="many2many_tags"/>
|
||||||
|
</group>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
Export Product Stock in Excel v16
|
||||||
|
=================================
|
||||||
|
This module helps you to take current stock report for all products in each warehouse.
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
=============
|
||||||
|
* No additional configurations needed
|
||||||
|
|
||||||
|
Company
|
||||||
|
-------
|
||||||
|
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
|
||||||
|
|
||||||
|
Credits
|
||||||
|
-------
|
||||||
|
* Developers: Cybrosys Techno Solutions odoo@cybrosys.com
|
||||||
|
Version 15: Midilaj V K @cybrosys
|
||||||
|
Version 16: Sahla Sherin @cybrosys
|
||||||
|
|
||||||
|
|
||||||
|
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 <https://cybrosys.com/>`__
|
||||||
|
|
||||||
|
Further information
|
||||||
|
===================
|
||||||
|
HTML Description: `<static/description/index.html>`__
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# Cybrosys Technologies Pvt. Ltd.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
||||||
|
# Author: Midilaj (<https://www.cybrosys.com>)
|
||||||
|
#
|
||||||
|
# You can modify it under the terms of the GNU LESSER
|
||||||
|
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
# (LGPL v3) along with this program.
|
||||||
|
# If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
from . import controllers
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# Cybrosys Technologies Pvt. Ltd.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
||||||
|
# Author: Midilaj (<https://www.cybrosys.com>)
|
||||||
|
#
|
||||||
|
# You can modify it under the terms of the GNU LESSER
|
||||||
|
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
# (LGPL v3) along with this program.
|
||||||
|
# If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
{
|
||||||
|
'name': 'Export Product Stock in Excel',
|
||||||
|
'version': '16.0.1.0.0',
|
||||||
|
'live_test_url': 'https://www.youtube.com/watch?v=9ae4GkApHQM',
|
||||||
|
'summary': "Current Stock Report for all Products in each Warehouse",
|
||||||
|
'description': "Current Stock Report for all Products in each Warehouse, Odoo 13,Odoo13",
|
||||||
|
'category': 'Odex25-Inventory/Odex25-Inventory',
|
||||||
|
'author': 'Cybrosys Techno Solutions',
|
||||||
|
'maintainer': 'Cybrosys Techno Solutions',
|
||||||
|
'company': 'Cybrosys Techno Solutions',
|
||||||
|
'website': 'https://www.cybrosys.com',
|
||||||
|
'depends': [
|
||||||
|
'base',
|
||||||
|
'sale_management',
|
||||||
|
'stock',
|
||||||
|
'purchase',
|
||||||
|
],
|
||||||
|
'data': [
|
||||||
|
'views/wizard_view.xml',
|
||||||
|
'security/ir.model.access.csv',
|
||||||
|
],
|
||||||
|
'images': ['static/description/banner.png'],
|
||||||
|
'assets': {
|
||||||
|
'web.assets_backend': [
|
||||||
|
'export_stockinfo_xls/static/src/js/action_manager.js',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'license': 'AGPL-3',
|
||||||
|
'installable': True,
|
||||||
|
'auto_install': False,
|
||||||
|
'auto_install': False,
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# Cybrosys Technologies Pvt. Ltd.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2020-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
||||||
|
# Author: Midilaj (<https://www.cybrosys.com>)
|
||||||
|
#
|
||||||
|
# You can modify it under the terms of the GNU LESSER
|
||||||
|
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
# (LGPL v3) along with this program.
|
||||||
|
# If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
from . import main
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# Cybrosys Technologies Pvt. Ltd.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
||||||
|
# Author: Midilaj (<https://www.cybrosys.com>)
|
||||||
|
#
|
||||||
|
# You can modify it under the terms of the GNU LESSER
|
||||||
|
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
# (LGPL v3) along with this program.
|
||||||
|
# If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
import json
|
||||||
|
from odoo import http
|
||||||
|
from odoo.http import content_disposition, request, serialize_exception as _serialize_exception
|
||||||
|
from odoo.tools import html_escape
|
||||||
|
|
||||||
|
|
||||||
|
class XLSXReportController(http.Controller):
|
||||||
|
|
||||||
|
@http.route('/xlsx_reports', type='http', auth='user', methods=['POST'], csrf=False)
|
||||||
|
def get_report_xlsx(self, model, options, output_format, report_name, **kw):
|
||||||
|
uid = request.session.uid
|
||||||
|
report_obj = request.env[model].with_user(uid)
|
||||||
|
options = json.loads(options)
|
||||||
|
token = 'dummy-because-api-expects-one'
|
||||||
|
try:
|
||||||
|
if output_format == 'xlsx':
|
||||||
|
response = request.make_response(
|
||||||
|
None,
|
||||||
|
headers=[
|
||||||
|
('Content-Type', 'application/vnd.ms-excel'),
|
||||||
|
('Content-Disposition', content_disposition(report_name + '.xlsx'))
|
||||||
|
]
|
||||||
|
)
|
||||||
|
report_obj.get_xlsx_report(options, response)
|
||||||
|
response.set_cookie('fileToken', token)
|
||||||
|
return response
|
||||||
|
except Exception as e:
|
||||||
|
se = _serialize_exception(e)
|
||||||
|
error = {
|
||||||
|
'code': 200,
|
||||||
|
'message': 'Odoo Server Error',
|
||||||
|
'data': se
|
||||||
|
}
|
||||||
|
return request.make_response(html_escape(json.dumps(error)))
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
## Module <export_stockinfo_xls>
|
||||||
|
|
||||||
|
#### 04.10.2021
|
||||||
|
#### Version 16.0.1.0.0
|
||||||
|
#### ADD
|
||||||
|
Initial Commit Export Product Stock in Excel
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# Cybrosys Technologies Pvt. Ltd.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
||||||
|
# Author: Midilaj (<https://www.cybrosys.com>)
|
||||||
|
#
|
||||||
|
# You can modify it under the terms of the GNU LESSER
|
||||||
|
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
# (LGPL v3) along with this program.
|
||||||
|
# If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
from . import res_partner
|
||||||
|
from . import wizard
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# Cybrosys Technologies Pvt. Ltd.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
||||||
|
# Author: Midilaj (<https://www.cybrosys.com>)
|
||||||
|
#
|
||||||
|
# You can modify it under the terms of the GNU LESSER
|
||||||
|
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
# (LGPL v3) along with this program.
|
||||||
|
# If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class Partner(models.Model):
|
||||||
|
_inherit = 'res.partner'
|
||||||
|
|
||||||
|
supplier_id = fields.Many2many('wizard.stock.history', 'supp_wiz_rel', 'wiz', 'supp', invisible=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Category(models.Model):
|
||||||
|
_inherit = 'product.category'
|
||||||
|
|
||||||
|
obj = fields.Many2many('wizard.stock.history', 'categ_wiz_rel', 'wiz', 'categ', invisible=True)
|
||||||
|
|
||||||
|
|
||||||
|
class Warehouse(models.Model):
|
||||||
|
_inherit = 'stock.warehouse'
|
||||||
|
|
||||||
|
obj = fields.Many2many('wizard.stock.history', 'wh_wiz_rel', 'wiz', 'wh', invisible=True)
|
||||||
|
|
@ -0,0 +1,251 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#############################################################################
|
||||||
|
#
|
||||||
|
# Cybrosys Technologies Pvt. Ltd.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
||||||
|
# Author: Midilaj (<https://www.cybrosys.com>)
|
||||||
|
#
|
||||||
|
# You can modify it under the terms of the GNU LESSER
|
||||||
|
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
# (LGPL v3) along with this program.
|
||||||
|
# If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#############################################################################
|
||||||
|
import time
|
||||||
|
from datetime import date, datetime
|
||||||
|
import pytz
|
||||||
|
import json
|
||||||
|
import datetime
|
||||||
|
import io
|
||||||
|
from odoo import api, fields, models, _
|
||||||
|
from odoo.tools import date_utils
|
||||||
|
|
||||||
|
try:
|
||||||
|
from odoo.tools.misc import xlsxwriter
|
||||||
|
except ImportError:
|
||||||
|
import xlsxwriter
|
||||||
|
|
||||||
|
|
||||||
|
class StockReport(models.TransientModel):
|
||||||
|
_name = "wizard.stock.history"
|
||||||
|
_description = "Current Stock History"
|
||||||
|
|
||||||
|
warehouse_ids = fields.Many2many('stock.warehouse', 'wh_wiz_rel', 'wh', 'wiz', string='Warehouse', required=True)
|
||||||
|
category_ids = fields.Many2many('product.category', 'categ_wiz_rel', 'categ', 'wiz', string='Category')
|
||||||
|
|
||||||
|
def export_xls(self):
|
||||||
|
data = {
|
||||||
|
'ids': self.ids,
|
||||||
|
'model': self._name,
|
||||||
|
'warehouse': self.warehouse_ids.ids,
|
||||||
|
'category': self.category_ids.ids,
|
||||||
|
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
'type': 'ir.actions.report',
|
||||||
|
'data': {'model': 'wizard.stock.history',
|
||||||
|
'options': json.dumps(data, default=date_utils.json_default),
|
||||||
|
'output_format': 'xlsx',
|
||||||
|
'report_name': 'Current Stock History',
|
||||||
|
},
|
||||||
|
'report_type': 'stock_xlsx'
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_warehouse(self, data):
|
||||||
|
wh = data.warehouse_ids.mapped('id')
|
||||||
|
obj = self.env['stock.warehouse'].search([('id', 'in', wh)])
|
||||||
|
l1 = []
|
||||||
|
l2 = []
|
||||||
|
for j in obj:
|
||||||
|
l1.append(j.name)
|
||||||
|
l2.append(j.id)
|
||||||
|
return l1, l2
|
||||||
|
|
||||||
|
def get_lines(self, data, warehouse_ids):
|
||||||
|
lines = []
|
||||||
|
categ_id = data.mapped('id')
|
||||||
|
if categ_id:
|
||||||
|
categ_products = self.env['product.product'].search([('categ_id', 'in', categ_id)])
|
||||||
|
|
||||||
|
else:
|
||||||
|
categ_products = self.env['product.product'].search([])
|
||||||
|
product_ids = tuple([pro_id.id for pro_id in categ_products])
|
||||||
|
sale_query = """
|
||||||
|
SELECT sum(s_o_l.product_uom_qty) AS product_uom_qty, s_o_l.product_id FROM sale_order_line AS s_o_l
|
||||||
|
JOIN sale_order AS s_o ON s_o_l.order_id = s_o.id
|
||||||
|
WHERE s_o.state IN ('sale','done')
|
||||||
|
AND s_o.warehouse_id = %s
|
||||||
|
AND s_o_l.product_id in %s group by s_o_l.product_id"""
|
||||||
|
purchase_query = """
|
||||||
|
SELECT sum(p_o_l.product_qty) AS product_qty, p_o_l.product_id FROM purchase_order_line AS p_o_l
|
||||||
|
JOIN purchase_order AS p_o ON p_o_l.order_id = p_o.id
|
||||||
|
INNER JOIN stock_picking_type AS s_p_t ON p_o.picking_type_id = s_p_t.id
|
||||||
|
WHERE p_o.state IN ('purchase','done')
|
||||||
|
AND s_p_t.warehouse_id = %s AND p_o_l.product_id in %s group by p_o_l.product_id"""
|
||||||
|
params = warehouse_ids, product_ids if product_ids else (0, 0)
|
||||||
|
self._cr.execute(sale_query, params)
|
||||||
|
sol_query_obj = self._cr.dictfetchall()
|
||||||
|
self._cr.execute(purchase_query, params)
|
||||||
|
pol_query_obj = self._cr.dictfetchall()
|
||||||
|
for obj in categ_products:
|
||||||
|
sale_value = 0
|
||||||
|
purchase_value = 0
|
||||||
|
for sol_product in sol_query_obj:
|
||||||
|
if sol_product['product_id'] == obj.id:
|
||||||
|
sale_value = sol_product['product_uom_qty']
|
||||||
|
for pol_product in pol_query_obj:
|
||||||
|
if pol_product['product_id'] == obj.id:
|
||||||
|
purchase_value = pol_product['product_qty']
|
||||||
|
virtual_available = obj.with_context({'warehouse': warehouse_ids}).virtual_available
|
||||||
|
outgoing_qty = obj.with_context({'warehouse': warehouse_ids}).outgoing_qty
|
||||||
|
incoming_qty = obj.with_context({'warehouse': warehouse_ids}).incoming_qty
|
||||||
|
available_qty = virtual_available + outgoing_qty - incoming_qty
|
||||||
|
value = available_qty * obj.standard_price
|
||||||
|
vals = {
|
||||||
|
'sku': obj.default_code,
|
||||||
|
'name': obj.name,
|
||||||
|
'category': obj.categ_id.name,
|
||||||
|
'cost_price': obj.standard_price,
|
||||||
|
'available': available_qty,
|
||||||
|
'virtual': virtual_available,
|
||||||
|
'incoming': incoming_qty,
|
||||||
|
'outgoing': outgoing_qty,
|
||||||
|
'net_on_hand': obj.with_context({'warehouse': warehouse_ids}).qty_available,
|
||||||
|
'total_value': value,
|
||||||
|
'sale_value': sale_value,
|
||||||
|
'purchase_value': purchase_value,
|
||||||
|
}
|
||||||
|
lines.append(vals)
|
||||||
|
return lines
|
||||||
|
|
||||||
|
def get_xlsx_report(self, data, response):
|
||||||
|
output = io.BytesIO()
|
||||||
|
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
|
||||||
|
lines = self.browse(data['ids'])
|
||||||
|
d = lines.category_ids
|
||||||
|
get_warehouse = self.get_warehouse(lines)
|
||||||
|
count = len(get_warehouse[0]) * 11 + 6
|
||||||
|
comp = self.env.user.company_id.name
|
||||||
|
sheet = workbook.add_worksheet('Stock Info')
|
||||||
|
format0 = workbook.add_format({'font_size': 20, 'align': 'center', 'bold': True})
|
||||||
|
format1 = workbook.add_format({'font_size': 14, 'align': 'vcenter', 'bold': True})
|
||||||
|
format11 = workbook.add_format({'font_size': 12, 'align': 'center', 'bold': True})
|
||||||
|
format21 = workbook.add_format({'font_size': 10, 'align': 'center', 'bold': True})
|
||||||
|
format3 = workbook.add_format({'bottom': True, 'top': True, 'font_size': 12})
|
||||||
|
format4 = workbook.add_format({'font_size': 12, 'align': 'left', 'bold': True})
|
||||||
|
font_size_8 = workbook.add_format({'font_size': 8, 'align': 'center'})
|
||||||
|
font_size_8_l = workbook.add_format({'font_size': 8, 'align': 'left'})
|
||||||
|
font_size_8_r = workbook.add_format({'font_size': 8, 'align': 'right'})
|
||||||
|
red_mark = workbook.add_format({'font_size': 8, 'bg_color': 'red'})
|
||||||
|
justify = workbook.add_format({'font_size': 12})
|
||||||
|
format3.set_align('center')
|
||||||
|
justify.set_align('justify')
|
||||||
|
format1.set_align('center')
|
||||||
|
red_mark.set_align('center')
|
||||||
|
sheet.merge_range(1, 7, 2, 10, 'Product Stock Info', format0)
|
||||||
|
sheet.merge_range(3, 7, 3, 10, comp, format11)
|
||||||
|
w_house = ', '
|
||||||
|
cat = ', '
|
||||||
|
c = []
|
||||||
|
d1 = d.mapped('id')
|
||||||
|
if d1:
|
||||||
|
for i in d1:
|
||||||
|
c.append(self.env['product.category'].browse(i).name)
|
||||||
|
cat = cat.join(c)
|
||||||
|
sheet.merge_range(4, 0, 4, 1, 'Category(s) : ', format4)
|
||||||
|
sheet.merge_range(4, 2, 4, 3 + len(d1), cat, format4)
|
||||||
|
sheet.merge_range(5, 0, 5, 1, 'Warehouse(s) : ', format4)
|
||||||
|
w_house = w_house.join(get_warehouse[0])
|
||||||
|
sheet.merge_range(5, 2, 5, 3 + len(get_warehouse[0]), w_house, format4)
|
||||||
|
user = self.env['res.users'].browse(self.env.uid)
|
||||||
|
tz = pytz.timezone(user.tz if user.tz else 'UTC')
|
||||||
|
times = pytz.utc.localize(datetime.datetime.now()).astimezone(tz)
|
||||||
|
sheet.merge_range('A8:G8', 'Report Date: ' + str(times.strftime("%Y-%m-%d %H:%M %p")), format1)
|
||||||
|
sheet.merge_range(7, 7, 7, count, 'Warehouses', format1)
|
||||||
|
sheet.merge_range('A9:G9', 'Product Information', format11)
|
||||||
|
w_col_no = 6
|
||||||
|
w_col_no1 = 7
|
||||||
|
for i in get_warehouse[0]:
|
||||||
|
w_col_no = w_col_no + 11
|
||||||
|
sheet.merge_range(8, w_col_no1, 8, w_col_no, i, format11)
|
||||||
|
w_col_no1 = w_col_no1 + 11
|
||||||
|
sheet.write(9, 0, 'SKU', format21)
|
||||||
|
sheet.merge_range(9, 1, 9, 3, 'Name', format21)
|
||||||
|
sheet.merge_range(9, 4, 9, 5, 'Category', format21)
|
||||||
|
sheet.write(9, 6, 'Cost Price', format21)
|
||||||
|
p_col_no1 = 7
|
||||||
|
for i in get_warehouse[0]:
|
||||||
|
sheet.write(9, p_col_no1, 'Available', format21)
|
||||||
|
sheet.write(9, p_col_no1 + 1, 'Virtual', format21)
|
||||||
|
sheet.write(9, p_col_no1 + 2, 'Incoming', format21)
|
||||||
|
sheet.write(9, p_col_no1 + 3, 'Outgoing', format21)
|
||||||
|
sheet.merge_range(9, p_col_no1 + 4, 9, p_col_no1 + 5, 'Net On Hand', format21)
|
||||||
|
sheet.merge_range(9, p_col_no1 + 6, 9, p_col_no1 + 7, 'Total Sold', format21)
|
||||||
|
sheet.merge_range(9, p_col_no1 + 8, 9, p_col_no1 + 9, 'Total Purchased', format21)
|
||||||
|
sheet.write(9, p_col_no1 + 10, 'Valuation', format21)
|
||||||
|
p_col_no1 = p_col_no1 + 11
|
||||||
|
prod_row = 10
|
||||||
|
prod_col = 0
|
||||||
|
for i in get_warehouse[1]:
|
||||||
|
get_line = self.get_lines(d, i)
|
||||||
|
for each in get_line:
|
||||||
|
sheet.write(prod_row, prod_col, each['sku'], font_size_8)
|
||||||
|
sheet.merge_range(prod_row, prod_col + 1, prod_row, prod_col + 3, each['name'], font_size_8_l)
|
||||||
|
sheet.merge_range(prod_row, prod_col + 4, prod_row, prod_col + 5, each['category'], font_size_8_l)
|
||||||
|
sheet.write(prod_row, prod_col + 6, each['cost_price'], font_size_8_r)
|
||||||
|
prod_row = prod_row + 1
|
||||||
|
break
|
||||||
|
prod_row = 10
|
||||||
|
prod_col = 7
|
||||||
|
for i in get_warehouse[1]:
|
||||||
|
get_line = self.get_lines(d, i)
|
||||||
|
for each in get_line:
|
||||||
|
if each['available'] < 0:
|
||||||
|
sheet.write(prod_row, prod_col, each['available'], red_mark)
|
||||||
|
else:
|
||||||
|
sheet.write(prod_row, prod_col, each['available'], font_size_8)
|
||||||
|
if each['virtual'] < 0:
|
||||||
|
sheet.write(prod_row, prod_col + 1, each['virtual'], red_mark)
|
||||||
|
else:
|
||||||
|
sheet.write(prod_row, prod_col + 1, each['virtual'], font_size_8)
|
||||||
|
if each['incoming'] < 0:
|
||||||
|
sheet.write(prod_row, prod_col + 2, each['incoming'], red_mark)
|
||||||
|
else:
|
||||||
|
sheet.write(prod_row, prod_col + 2, each['incoming'], font_size_8)
|
||||||
|
if each['outgoing'] < 0:
|
||||||
|
sheet.write(prod_row, prod_col + 3, each['outgoing'], red_mark)
|
||||||
|
else:
|
||||||
|
sheet.write(prod_row, prod_col + 3, each['outgoing'], font_size_8)
|
||||||
|
if each['net_on_hand'] < 0:
|
||||||
|
sheet.merge_range(prod_row, prod_col + 4, prod_row, prod_col + 5, each['net_on_hand'], red_mark)
|
||||||
|
else:
|
||||||
|
sheet.merge_range(prod_row, prod_col + 4, prod_row, prod_col + 5, each['net_on_hand'], font_size_8)
|
||||||
|
if each['sale_value'] < 0:
|
||||||
|
sheet.merge_range(prod_row, prod_col + 6, prod_row, prod_col + 7, each['sale_value'], red_mark)
|
||||||
|
else:
|
||||||
|
sheet.merge_range(prod_row, prod_col + 6, prod_row, prod_col + 7, each['sale_value'],
|
||||||
|
font_size_8)
|
||||||
|
if each['purchase_value'] < 0:
|
||||||
|
sheet.merge_range(prod_row, prod_col + 8, prod_row, prod_col + 9, each['purchase_value'], red_mark)
|
||||||
|
else:
|
||||||
|
sheet.merge_range(prod_row, prod_col + 8, prod_row, prod_col + 9, each['purchase_value'],
|
||||||
|
font_size_8)
|
||||||
|
if each['total_value'] < 0:
|
||||||
|
sheet.write(prod_row, prod_col + 10, each['total_value'], red_mark)
|
||||||
|
else:
|
||||||
|
sheet.write(prod_row, prod_col + 10, each['total_value'], font_size_8_r)
|
||||||
|
prod_row = prod_row + 1
|
||||||
|
prod_row = 10
|
||||||
|
prod_col = prod_col + 11
|
||||||
|
workbook.close()
|
||||||
|
output.seek(0)
|
||||||
|
response.stream.write(output.read())
|
||||||
|
output.close()
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_wizard_stock_history_user,wizard.stock.history,model_wizard_stock_history,base.group_user,1,1,1,1
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 310 B |