Deleted Stock UOM Replace Utility

This commit is contained in:
Nabin Hait 2015-11-12 11:59:08 +05:30
parent f71ecbba2c
commit 61fb7ee5b8
9 changed files with 1 additions and 610 deletions

View File

@ -1,284 +0,0 @@
<!-- title: Stock UOM Replace Utility -->
<div class="dev-header">
<a class="btn btn-default btn-sm" disabled style="margin-bottom: 10px;">
Version 6.7.7</a>
<a class="btn btn-default btn-sm" href="https://github.com/frappe/erpnext/tree/develop/erpnext/stock/doctype/stock_uom_replace_utility"
target="_blank" style="margin-left: 10px; margin-bottom: 10px;"><i class="octicon octicon-mark-github"></i> Source</a>
</div>
<span class="label label-info">Single</span>
<h3>Fields</h3>
<table class="table table-bordered" style="table-layout: fixed;">
<thead>
<tr>
<th style="width: 5%">Sr</th>
<th style="width: 25%">Fieldname</th>
<th style="width: 20%">Type</th>
<th style="width: 25%">Label</th>
<th style="width: 25%">Options</th>
</tr>
</thead>
<tbody>
<tr >
<td>1</td>
<td ><code>item_code</code></td>
<td >
Link</td>
<td >
Item
</td>
<td>
<a href="https://frappe.github.io/erpnext/current/models/stock/item">Item</a>
</td>
</tr>
<tr >
<td>2</td>
<td ><code>current_stock_uom</code></td>
<td >
Link</td>
<td >
Current Stock UOM
</td>
<td>
<a href="https://frappe.github.io/erpnext/current/models/setup/uom">UOM</a>
</td>
</tr>
<tr >
<td>3</td>
<td ><code>new_stock_uom</code></td>
<td >
Link</td>
<td >
New Stock UOM
</td>
<td>
<a href="https://frappe.github.io/erpnext/current/models/setup/uom">UOM</a>
</td>
</tr>
<tr >
<td>4</td>
<td ><code>conversion_factor</code></td>
<td >
Float</td>
<td >
Conversion Factor
</td>
<td></td>
</tr>
<tr >
<td>5</td>
<td ><code>update</code></td>
<td >
Button</td>
<td >
Update
</td>
<td>
<pre>update_stock_uom</pre>
</td>
</tr>
</tbody>
</table>
<hr>
<h3>Controller</h3>
<h4>erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility</h4>
<h3 style="font-weight: normal;">Class <b>StockUOMReplaceUtility</b></h3>
<p style="padding-left: 30px;"><i>Inherits from frappe.model.document.Document</i></h4>
<div class="docs-attr-desc"><p></p>
</div>
<div style="padding-left: 30px;">
<p class="docs-attr-name">
<a name="update_stock_uom" href="#update_stock_uom" class="text-muted small">
<i class="icon-link small" style="color: #ccc;"></i></a>
<b>update_stock_uom</b>
<i class="text-muted">(self)</i>
</p>
<div class="docs-attr-desc"><p><span class="text-muted">No docs</span></p>
</div>
<br>
<p class="docs-attr-name">
<a name="validate_item" href="#validate_item" class="text-muted small">
<i class="icon-link small" style="color: #ccc;"></i></a>
<b>validate_item</b>
<i class="text-muted">(self)</i>
</p>
<div class="docs-attr-desc"><p><span class="text-muted">No docs</span></p>
</div>
<br>
<p class="docs-attr-name">
<a name="validate_mandatory" href="#validate_mandatory" class="text-muted small">
<i class="icon-link small" style="color: #ccc;"></i></a>
<b>validate_mandatory</b>
<i class="text-muted">(self)</i>
</p>
<div class="docs-attr-desc"><p><span class="text-muted">No docs</span></p>
</div>
<br>
<p class="docs-attr-name">
<a name="validate_uom_integer_type" href="#validate_uom_integer_type" class="text-muted small">
<i class="icon-link small" style="color: #ccc;"></i></a>
<b>validate_uom_integer_type</b>
<i class="text-muted">(self)</i>
</p>
<div class="docs-attr-desc"><p><span class="text-muted">No docs</span></p>
</div>
<br>
</div>
<hr>
<p><span class="label label-info">Public API</span>
<br><code>/api/method/erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.get_stock_uom</code>
</p>
<p class="docs-attr-name">
<a name="erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.get_stock_uom" href="#erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.get_stock_uom" class="text-muted small">
<i class="icon-link small" style="color: #ccc;"></i></a>
erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.<b>get_stock_uom</b>
<i class="text-muted">(item_code)</i>
</p>
<div class="docs-attr-desc"><p><span class="text-muted">No docs</span></p>
</div>
<br>
<p class="docs-attr-name">
<a name="erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.update_bin" href="#erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.update_bin" class="text-muted small">
<i class="icon-link small" style="color: #ccc;"></i></a>
erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.<b>update_bin</b>
<i class="text-muted">(item_code, new_stock_uom, conversion_factor)</i>
</p>
<div class="docs-attr-desc"><p><span class="text-muted">No docs</span></p>
</div>
<br>
<p class="docs-attr-name">
<a name="erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.update_item_master" href="#erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.update_item_master" class="text-muted small">
<i class="icon-link small" style="color: #ccc;"></i></a>
erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.<b>update_item_master</b>
<i class="text-muted">(item_code, new_stock_uom, conversion_factor)</i>
</p>
<div class="docs-attr-desc"><p><span class="text-muted">No docs</span></p>
</div>
<br>
<p class="docs-attr-name">
<a name="erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.update_stock_ledger_entry" href="#erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.update_stock_ledger_entry" class="text-muted small">
<i class="icon-link small" style="color: #ccc;"></i></a>
erpnext.stock.doctype.stock_uom_replace_utility.stock_uom_replace_utility.<b>update_stock_ledger_entry</b>
<i class="text-muted">(item_code, new_stock_uom, conversion_factor)</i>
</p>
<div class="docs-attr-desc"><p><span class="text-muted">No docs</span></p>
</div>
<br>
<!-- autodoc -->
<!-- jinja -->
<!-- static -->

View File

@ -1,4 +1,3 @@
packing-slip
quality-inspection
landed-cost-voucher
stock-uom-replace-utility

View File

@ -1,10 +0,0 @@
#Stock UOM Replace Utility
This tool will help you to change the UOM (Unit of measurement) of an existing Item.
You need to select an Item, system fetches the Existing UOM of that item. You can then select the new UOM for that item
and specify the conversion factor.
<img class="screenshot" alt="Stock Uom Replace" src="{{url_prefix}}/assets/img/stock/uom-replace.png">
{next}

View File

@ -231,3 +231,4 @@ erpnext.patches.v6_4.fix_expense_included_in_valuation
execute:frappe.delete_doc_if_exists("Report", "Item-wise Last Purchase Rate")
erpnext.patches.v6_6.fix_website_image
erpnext.patches.v6_6.remove_fiscal_year_from_leave_allocation
execute:frappe.delete_doc_if_exists("DocType", "Stock UOM Replace Utility")

View File

@ -1 +0,0 @@
Tool to replace unit of measure (UoM) of an Item.

View File

@ -1 +0,0 @@
from __future__ import unicode_literals

View File

@ -1,19 +0,0 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
$.extend(cur_frm.cscript, {
onload: function() {
cur_frm.set_query("item_code", function() {
return erpnext.queries.item({"is_stock_item": 1});
});
},
item_code: function() {
if(cur_frm.doc.item_code) {
return cur_frm.call({
method: "get_stock_uom",
args: { item_code: cur_frm.doc.item_code }
});
}
}
});

View File

@ -1,178 +0,0 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"creation": "2013-01-10 16:34:30",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"fields": [
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "item_code",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Item",
"no_copy": 0,
"options": "Item",
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "current_stock_uom",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Current Stock UOM",
"no_copy": 0,
"options": "UOM",
"permlevel": 0,
"print_hide": 0,
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "new_stock_uom",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "New Stock UOM",
"no_copy": 0,
"options": "UOM",
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "conversion_factor",
"fieldtype": "Float",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Conversion Factor",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"fieldname": "update",
"fieldtype": "Button",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Update",
"no_copy": 0,
"options": "update_stock_uom",
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "icon-magic",
"idx": 1,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 1,
"istable": 0,
"modified": "2015-08-12 08:52:09.322664",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock UOM Replace Utility",
"owner": "Administrator",
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 0,
"email": 1,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 0,
"role": "Item Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 0,
"email": 1,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 0,
"role": "Stock Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
}
],
"read_only": 0,
"read_only_onload": 0
}

View File

@ -1,116 +0,0 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
from frappe.utils import cstr, flt, cint
from frappe import _
from frappe.model.document import Document
class StockUOMReplaceUtility(Document):
# Update Stock UOM
def update_stock_uom(self):
self.validate_item()
self.validate_mandatory()
self.validate_uom_integer_type()
update_stock_ledger_entry(self.item_code, self.new_stock_uom, self.conversion_factor)
update_bin(self.item_code, self.new_stock_uom, self.conversion_factor)
update_item_master(self.item_code, self.new_stock_uom, self.conversion_factor)
#if item is template change UOM for all associated variants
if frappe.db.get_value("Item", self.item_code, "has_variants"):
for d in frappe.db.get_all("Item", filters= {"variant_of": self.item_code}):
update_stock_ledger_entry(d.name, self.new_stock_uom, self.conversion_factor)
update_bin(d.name, self.new_stock_uom, self.conversion_factor)
update_item_master(d.name, self.new_stock_uom, self.conversion_factor)
def validate_item(self):
if frappe.db.get_value("Item", self.item_code, "variant_of"):
frappe.throw(_("You cannot change default UOM of Variant. To change default UOM for Variant change default UOM of the Template"))
def validate_mandatory(self):
if not cstr(self.item_code):
frappe.throw(_("Item is required"))
if not cstr(self.new_stock_uom):
frappe.throw(_("New Stock UOM is required"))
if cstr(self.current_stock_uom) == cstr(self.new_stock_uom):
frappe.throw(_("New Stock UOM must be different from current stock UOM"))
# check conversion factor
if not flt(self.conversion_factor):
frappe.throw(_("Conversion Factor is required"))
stock_uom = frappe.db.get_value("Item", self.item_code, "stock_uom")
if cstr(self.new_stock_uom) == cstr(stock_uom):
frappe.throw(_("Item is updated"))
def validate_uom_integer_type(self):
current_is_integer = frappe.db.get_value("UOM", self.current_stock_uom, "must_be_whole_number")
new_is_integer = frappe.db.get_value("UOM", self.new_stock_uom, "must_be_whole_number")
if not current_is_integer and new_is_integer:
frappe.throw(_("New UOM must NOT be of type Whole Number"))
if current_is_integer and new_is_integer and cint(self.conversion_factor)!=self.conversion_factor:
frappe.throw(_("Conversion factor cannot be in fractions"))
def update_item_master(item_code, new_stock_uom, conversion_factor):
frappe.db.set_value("Item", item_code, "stock_uom", new_stock_uom)
frappe.msgprint(_("Stock UOM updated for Item {0}").format(item_code))
def update_bin(item_code, new_stock_uom, conversion_factor):
# update bin
if flt(conversion_factor) != flt(1):
frappe.db.sql("""update `tabBin`
set stock_uom = %s,
indented_qty = ifnull(indented_qty,0) * %s,
ordered_qty = ifnull(ordered_qty,0) * %s,
reserved_qty = ifnull(reserved_qty,0) * %s,
planned_qty = ifnull(planned_qty,0) * %s,
projected_qty = actual_qty + ordered_qty + indented_qty +
planned_qty - reserved_qty
where item_code = %s""", (new_stock_uom, conversion_factor,
conversion_factor, conversion_factor,
conversion_factor, item_code))
else:
frappe.db.sql("update `tabBin` set stock_uom = %s where item_code = %s",
(new_stock_uom, item_code) )
def update_stock_ledger_entry(item_code, new_stock_uom, conversion_factor):
# update stock ledger entry
from erpnext.stock.stock_ledger import update_entries_after
if flt(conversion_factor) != flt(1):
frappe.db.sql("""update `tabStock Ledger Entry`
set
stock_uom = %s,
actual_qty = ifnull(actual_qty,0) * %s,
qty_after_transaction = ifnull(qty_after_transaction, 0) * %s
where item_code = %s""",
(new_stock_uom, conversion_factor, conversion_factor, item_code))
else:
frappe.db.sql("""update `tabStock Ledger Entry` set stock_uom=%s
where item_code=%s""", (new_stock_uom, item_code))
# acknowledge user
frappe.msgprint(_("Stock Ledger entries balances updated"))
# update item valuation
if flt(conversion_factor) != flt(1):
wh = frappe.db.sql("select name from `tabWarehouse`")
for w in wh:
update_entries_after({"item_code": item_code, "warehouse": w[0]})
# acknowledge user
frappe.msgprint(_("Item valuation updated"))
@frappe.whitelist()
def get_stock_uom(item_code):
return { 'current_stock_uom': cstr(frappe.db.get_value('Item', item_code, 'stock_uom')) }