Compare commits

...

24 Commits

Author SHA1 Message Date
Nabin Hait
a1099d28b8 Merge branch 'hotfix' 2016-10-18 15:25:31 +05:30
Nabin Hait
7b9e8368ea bumped to version 7.0.59 2016-10-18 15:55:31 +06:00
Nabin Hait
f32547a414 Merge pull request #6637 from nabinhait/cost_center_fix
Set cost center while creating invoice from SO/PO
2016-10-18 15:18:16 +05:30
Rushabh Mehta
17f6874450 [minor] [fix] doctype_dasboard.py files, move data to get_data 2016-10-18 14:54:39 +05:30
Nabin Hait
55a8797919 Set cost center while creating invoice from SO/PO 2016-10-18 14:54:17 +05:30
Nabin Hait
401be3f49b Merge pull request #6577 from PawanMeh/fixes_6566
[fix #6566]
2016-10-16 14:28:26 +05:30
Nabin Hait
a9ce406c48 Merge pull request #6579 from PawanMeh/fixes_6567
[fix] #6567
2016-10-16 14:28:00 +05:30
Nabin Hait
0b1b8afc3c Merge pull request #6611 from nabinhait/hotfix
Always calculate additional discount amount if percentage is mentioned
2016-10-16 14:25:28 +05:30
Nabin Hait
e040510545 Always calculate additional discount amount if percentage is mentioned 2016-10-13 12:14:47 +05:30
Nabin Hait
efd7c3e22b Merge pull request #6592 from rohitwaghchaure/production_planning_issue
[Fix] making of production order from material request with sales order, restirct validation validate_production_order_against_so in production order
2016-10-10 17:10:49 +05:30
Rohit Waghchaure
8e881cc7b9 [Fix] making of production order from material request with sales order, restirct validation validate_production_order_against_so in production order 2016-10-10 14:58:33 +05:30
Nabin Hait
fc90758932 Merge pull request #6589 from rohitwaghchaure/purchase_invoice_validation_issue
[Fix] Purchase invoice validation issue
2016-10-10 11:51:00 +05:30
Nabin Hait
1ca7a27b2f Merge pull request #6587 from rohitwaghchaure/pos_wildcard_search_issue
[Fix] wildcard search for pos not working
2016-10-10 11:50:01 +05:30
Rohit Waghchaure
3485d2467a [Fix] Purchase invoice validation issue 2016-10-09 18:05:17 +05:30
Rohit Waghchaure
6f33dfbc56 [Fix] wildcard search for pos not working 2016-10-09 15:32:56 +05:30
Pawan Mehta
8d62af627a Update fiscal-year.md 2016-10-09 09:20:12 +05:30
pawan
1c0ecede06 [fix] #6567 2016-10-09 09:06:49 +05:30
pawan
896c731a46 [fix] #6566 2016-10-09 08:44:40 +05:30
pawan
05790d1b38 [fix] #6566 2016-10-09 08:30:29 +05:30
pawan
5655ce936b [fix] #6567 2016-10-08 08:02:08 +05:30
pawan
361739ffb6 [fix #6566] 2016-10-07 19:00:30 +05:30
Nabin Hait
8fa2a04024 Merge branch 'hotfix' 2016-10-07 17:08:57 +05:30
Nabin Hait
89326b366d bumped to version 7.0.58 2016-10-07 17:38:57 +06:00
Nabin Hait
6aaa7d7742 Added missing file extension 2016-10-07 17:08:03 +05:30
32 changed files with 435 additions and 371 deletions

View File

@@ -2,7 +2,7 @@
from __future__ import unicode_literals
import frappe
__version__ = '7.0.57'
__version__ = '7.0.59'
def get_default_company(user=None):
'''Get default company for user'''

View File

@@ -10,6 +10,7 @@
"docstatus": 0,
"doctype": "DocType",
"document_type": "Setup",
"editable_grid": 0,
"fields": [
{
"allow_on_submit": 0,
@@ -249,14 +250,15 @@
"hide_toolbar": 0,
"icon": "icon-money",
"idx": 1,
"in_create": 0,
"image_view": 0,
"in_create": 1,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
"modified": "2016-05-16 15:23:14.770933",
"modified": "2016-10-18 14:22:00.207907",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Cost Center",
@@ -368,6 +370,5 @@
"read_only_onload": 0,
"search_fields": "parent_cost_center, is_group",
"sort_order": "ASC",
"track_seen": 0,
"version": 0
"track_seen": 0
}

View File

@@ -71,7 +71,7 @@ class PurchaseInvoice(BuyingController):
frappe.throw(_("Cash or Bank Account is mandatory for making payment entry"))
if flt(self.paid_amount) + flt(self.write_off_amount) \
- flt(self.base_grand_total) > 1/(10**(self.precision("base_grand_total") + 1)):
- flt(self.grand_total) > 1/(10**(self.precision("base_grand_total") + 1)):
frappe.throw(_("""Paid amount + Write Off Amount can not be greater than Grand Total"""))
def create_remarks(self):

View File

@@ -1,31 +1,32 @@
from frappe import _
data = {
'fieldname': 'purchase_invoice',
'non_standard_fieldnames': {
'Delivery Note': 'against_sales_invoice',
'Journal Entry': 'reference_name',
'Payment Entry': 'reference_name',
'Payment Request': 'reference_name',
'Landed Cost Voucher': 'receipt_document',
'Purchase Invoice': 'return_against'
},
'internal_links': {
'Purchase Order': ['items', 'sales_order'],
'Purchase Receipt': ['items', 'delivery_note'],
},
'transactions': [
{
'label': _('Payment'),
'items': ['Payment Entry', 'Payment Request', 'Journal Entry']
def get_data():
return {
'fieldname': 'purchase_invoice',
'non_standard_fieldnames': {
'Delivery Note': 'against_sales_invoice',
'Journal Entry': 'reference_name',
'Payment Entry': 'reference_name',
'Payment Request': 'reference_name',
'Landed Cost Voucher': 'receipt_document',
'Purchase Invoice': 'return_against'
},
{
'label': _('Reference'),
'items': ['Purchase Order', 'Purchase Receipt', 'Asset', 'Landed Cost Voucher']
'internal_links': {
'Purchase Order': ['items', 'sales_order'],
'Purchase Receipt': ['items', 'delivery_note'],
},
{
'label': _('Returns'),
'items': ['Purchase Invoice']
},
]
}
'transactions': [
{
'label': _('Payment'),
'items': ['Payment Entry', 'Payment Request', 'Journal Entry']
},
{
'label': _('Reference'),
'items': ['Purchase Order', 'Purchase Receipt', 'Asset', 'Landed Cost Voucher']
},
{
'label': _('Returns'),
'items': ['Purchase Invoice']
},
]
}

View File

@@ -1,30 +1,31 @@
from frappe import _
data = {
'fieldname': 'sales_invoice',
'non_standard_fieldnames': {
'Delivery Note': 'against_sales_invoice',
'Journal Entry': 'reference_name',
'Payment Entry': 'reference_name',
'Payment Request': 'reference_name',
'Sales Invoice': 'return_against'
},
'internal_links': {
'Sales Order': ['items', 'sales_order'],
'Delivery Note': ['items', 'delivery_note'],
},
'transactions': [
{
'label': _('Payment'),
'items': ['Payment Entry', 'Payment Request', 'Journal Entry']
def get_data():
return {
'fieldname': 'sales_invoice',
'non_standard_fieldnames': {
'Delivery Note': 'against_sales_invoice',
'Journal Entry': 'reference_name',
'Payment Entry': 'reference_name',
'Payment Request': 'reference_name',
'Sales Invoice': 'return_against'
},
{
'label': _('Reference'),
'items': ['Timesheet', 'Delivery Note', 'Sales Order']
'internal_links': {
'Sales Order': ['items', 'sales_order'],
'Delivery Note': ['items', 'delivery_note'],
},
{
'label': _('Returns'),
'items': ['Sales Invoice']
},
]
}
'transactions': [
{
'label': _('Payment'),
'items': ['Payment Entry', 'Payment Request', 'Journal Entry']
},
{
'label': _('Reference'),
'items': ['Timesheet', 'Delivery Note', 'Sales Order']
},
{
'label': _('Returns'),
'items': ['Sales Invoice']
},
]
}

View File

@@ -93,7 +93,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
me.get_data_from_server(function(){
me.load_data(false);
me.make_customer();
me.make_item_list(true);
me.make_item_list();
me.set_missing_values();
})
});
@@ -266,7 +266,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
make: function() {
this.make_search();
this.make_customer();
this.make_item_list(true);
this.make_item_list();
this.make_discount_field()
},
@@ -287,7 +287,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
this.search.$input.on("keyup", function() {
setTimeout(function() {
me.items = me.get_items();
me.make_item_list(false);
me.make_item_list();
}, 1000);
});
@@ -363,7 +363,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
}
},
make_item_list: function(index_search) {
make_item_list: function() {
var me = this;
if(!this.price_list) {
msgprint(__("Price List not found or disabled"));
@@ -377,7 +377,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
if (this.items) {
$.each(this.items, function(index, obj) {
if(!index_search || index < 16){
if(index < 30){
$(frappe.render_template("pos_item", {
item_code: obj.name,
item_price: format_currency(obj.price_list_rate, obj.currency),
@@ -423,7 +423,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
key = this.search.$input.val().toLowerCase();
var re = new RegExp('%', 'g');
var reg = new RegExp(key.replace(re, '\\w*\\s*[a-zA-Z0-9]*'))
var reg = new RegExp(key.replace(re, '[\\w*\\s*[a-zA-Z0-9]*]*'))
search_status = true
if(key){

View File

@@ -302,6 +302,11 @@ def make_purchase_invoice(source_name, target_doc=None):
target.amount = flt(obj.amount) - flt(obj.billed_amt)
target.base_amount = target.amount * flt(source_parent.conversion_rate)
target.qty = target.amount / flt(obj.rate) if (flt(obj.rate) and flt(obj.billed_amt)) else flt(obj.qty)
item = frappe.db.get_value("Item", target.item_code, ["item_group", "buying_cost_center"], as_dict=1)
target.cost_center = frappe.db.get_value("Project", obj.project, "cost_center") \
or item.buying_cost_center \
or frappe.db.get_value("Item Group", item.item_group, "default_cost_center")
doc = get_mapped_doc("Purchase Order", source_name, {
"Purchase Order": {

View File

@@ -1,24 +1,25 @@
from frappe import _
data = {
'fieldname': 'purchase_order',
'internal_links': {
'Material Request': ['items', 'material_request'],
'Supplier Quotation': ['items', 'supplier_quotation'],
'Project': ['project'],
},
'transactions': [
{
'label': _('Related'),
'items': ['Purchase Receipt', 'Purchase Invoice']
def get_data():
return {
'fieldname': 'purchase_order',
'internal_links': {
'Material Request': ['items', 'material_request'],
'Supplier Quotation': ['items', 'supplier_quotation'],
'Project': ['project'],
},
{
'label': _('Reference'),
'items': ['Material Request', 'Supplier Quotation', 'Project']
},
{
'label': _('Sub-contracting'),
'items': ['Stock Entry']
},
]
}
'transactions': [
{
'label': _('Related'),
'items': ['Purchase Receipt', 'Purchase Invoice']
},
{
'label': _('Reference'),
'items': ['Material Request', 'Supplier Quotation', 'Project']
},
{
'label': _('Sub-contracting'),
'items': ['Stock Entry']
},
]
}

View File

@@ -1,12 +1,13 @@
from frappe import _
data = {
'docstatus': 1,
'fieldname': 'request_for_quotation',
'transactions': [
{
'label': _('Related'),
'items': ['Supplier Quotation']
},
]
}
def get_data():
return {
'docstatus': 1,
'fieldname': 'request_for_quotation',
'transactions': [
{
'label': _('Related'),
'items': ['Supplier Quotation']
},
]
}

View File

@@ -1,17 +1,18 @@
from frappe import _
data = {
'heatmap': True,
'heatmap_message': _('This is based on transactions against this Supplier. See timeline below for details'),
'fieldname': 'supplier',
'transactions': [
{
'label': _('Procurement'),
'items': ['Request for Quotation', 'Supplier Quotation']
},
{
'label': _('Orders'),
'items': ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']
}
]
}
def get_data():
return {
'heatmap': True,
'heatmap_message': _('This is based on transactions against this Supplier. See timeline below for details'),
'fieldname': 'supplier',
'transactions': [
{
'label': _('Procurement'),
'items': ['Request for Quotation', 'Supplier Quotation']
},
{
'label': _('Orders'),
'items': ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']
}
]
}

View File

@@ -1,20 +1,21 @@
from frappe import _
data = {
'fieldname': 'supplier_quotation',
'internal_links': {
'Material Request': ['items', 'material_request'],
'Request for Quotation': ['items', 'request_for_quotation'],
'Project': ['items', 'project'],
},
'transactions': [
{
'label': _('Related'),
'items': ['Purchase Order']
def get_data():
return {
'fieldname': 'supplier_quotation',
'internal_links': {
'Material Request': ['items', 'material_request'],
'Request for Quotation': ['items', 'request_for_quotation'],
'Project': ['items', 'project'],
},
{
'label': _('Reference'),
'items': ['Material Request', 'Request for Quotation', 'Project']
},
]
}
'transactions': [
{
'label': _('Related'),
'items': ['Purchase Order']
},
{
'label': _('Reference'),
'items': ['Material Request', 'Request for Quotation', 'Project']
},
]
}

View File

@@ -338,7 +338,7 @@ class calculate_taxes_and_totals(object):
tax.item_wise_tax_detail = json.dumps(tax.item_wise_tax_detail, separators=(',', ':'))
def set_discount_amount(self):
if not self.doc.discount_amount and self.doc.additional_discount_percentage:
if self.doc.additional_discount_percentage:
self.doc.discount_amount = flt(flt(self.doc.get(scrub(self.doc.apply_discount_on)))
* self.doc.additional_discount_percentage / 100, self.doc.precision("discount_amount"))

View File

@@ -1,11 +1,12 @@
from frappe import _
data = {
'fieldname': 'prevdoc_docname',
'transactions': [
{
'label': _('Related'),
'items': ['Quotation']
},
]
}
def get_data():
return {
'fieldname': 'prevdoc_docname',
'transactions': [
{
'label': _('Related'),
'items': ['Quotation']
},
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -18,6 +18,11 @@ choose to start its fiscal year on October 1. That way, they know what their
income will be for that year, and can adjust their expenses to maintain their
desired profit margins.
To set the Fiscal Year as default, click on the 'Default' button.
In case you have multiple companies sharing the same Fiscal Year, you can add
it into the grid as shown below.
<img class="screenshot" alt="Fiscal Year" src="{{docs_base_url}}/assets/img/accounts/fiscal-year.png">
{next}

View File

@@ -1,7 +1,7 @@
A Material Request is a simple document identifying a requirement of a set of
Items (products or services) for a particular reason.
![Workflow]({{docs_base_url}}/assets/old_images/erpnext/material-request-workflow.jpg)
![Workflow]({{docs_base_url}}/assets/img/buying/material-request-flowchart.png)
To generate a Material Request manually go to:
@@ -25,6 +25,8 @@ A Material Request can be of type:
* Material Issue - If the requested material is to be Issued.
* Manufacture - If the requested material is to be Produced.
The User can also raise a [Request For Quotation]({{docs_base_url}}/user/manual/en/buying/request-for-quotation.html) against a Material Request. To create a Request For Quotation the user can click on 'Make'.
> Info: Material Request is not mandatory. It is ideal if you have centralized
buying so that you can collect this information from various departments.

View File

@@ -1,25 +1,26 @@
from frappe import _
data = {
'heatmap': True,
'heatmap_message': _('This is based on the attendance of this Employee'),
'fieldname': 'employee',
'transactions': [
{
'label': _('Leave and Attendance'),
'items': ['Attendance', 'Leave Application', 'Leave Allocation']
},
{
'label': _('Payroll'),
'items': ['Salary Structure', 'Salary Slip', 'Timesheet']
},
{
'label': _('Expense'),
'items': ['Expense Claim']
},
{
'label': _('Evaluation'),
'items': ['Appraisal']
}
]
}
def get_data():
return {
'heatmap': True,
'heatmap_message': _('This is based on the attendance of this Employee'),
'fieldname': 'employee',
'transactions': [
{
'label': _('Leave and Attendance'),
'items': ['Attendance', 'Leave Application', 'Leave Allocation']
},
{
'label': _('Payroll'),
'items': ['Salary Structure', 'Salary Slip', 'Timesheet']
},
{
'label': _('Expense'),
'items': ['Expense Claim']
},
{
'label': _('Evaluation'),
'items': ['Appraisal']
}
]
}

View File

@@ -58,7 +58,8 @@ class ProductionOrder(Document):
if so[0].project:
self.project = so[0].project
self.validate_production_order_against_so()
if not self.material_request:
self.validate_production_order_against_so()
else:
frappe.throw(_("Sales Order {0} is not valid").format(self.sales_order))

View File

@@ -454,20 +454,21 @@ class ProductionPlanningTool(Document):
material_request.update({"material_request_type": item_wrapper.default_material_request_type})
for sales_order, requested_qty in items_to_be_requested[item].items():
material_request.append("items", {
"doctype": "Material Request Item",
"__islocal": 1,
"item_code": item,
"item_name": item_wrapper.item_name,
"description": item_wrapper.description,
"uom": item_wrapper.stock_uom,
"item_group": item_wrapper.item_group,
"brand": item_wrapper.brand,
"qty": requested_qty,
"schedule_date": add_days(nowdate(), cint(item_wrapper.lead_time_days)),
"warehouse": self.purchase_request_for_warehouse,
"sales_order": sales_order if sales_order!="No Sales Order" else None
})
if sales_order != 'No Sales Order':
material_request.append("items", {
"doctype": "Material Request Item",
"__islocal": 1,
"item_code": item,
"item_name": item_wrapper.item_name,
"description": item_wrapper.description,
"uom": item_wrapper.stock_uom,
"item_group": item_wrapper.item_group,
"brand": item_wrapper.brand,
"qty": requested_qty,
"schedule_date": add_days(nowdate(), cint(item_wrapper.lead_time_days)),
"warehouse": self.purchase_request_for_warehouse,
"sales_order": sales_order if sales_order!="No Sales Order" else None
})
material_request.flags.ignore_permissions = 1
material_request.submit()

View File

@@ -0,0 +1,27 @@
from __future__ import unicode_literals
import frappe
def execute():
if frappe.db.table_exists("Time Log"):
timesheet = frappe.db.sql("""SELECT ts.name AS name, tl.name AS timelogname,
tl.modified AS modified, tl.modified_by AS modified_by, tl.creation AS creation, tl.owner AS owner
FROM
`tabTimesheet` ts, `tabTimesheet Detail` tsd, `tabTime Log` tl
WHERE
tsd.parent = ts.name AND tl.from_time = tsd.from_time AND tl.to_time = tsd.to_time
AND tl.hours = tsd.hours AND tl.billing_rate = tsd.billing_rate AND tsd.idx=1
AND tl.docstatus < 2""", as_dict=1)
for data in timesheet:
frappe.db.sql(""" update `tabTimesheet` set creation = %(creation)s,
owner = %(owner)s, modified = %(modified)s, modified_by = %(modified_by)s
where name = %(name)s""", data)
frappe.db.sql("""
update
tabCommunication
set
reference_doctype = "Timesheet", reference_name = %(timesheet)s
where
reference_doctype = "Time Log" and reference_name = %(timelog)s
""", {'timesheet': data.name, 'timelog': data.timelogname}, auto_commit=1)

View File

@@ -1,25 +1,26 @@
from frappe import _
data = {
'heatmap': True,
'heatmap_message': _('This is based on the Time Sheets created against this project'),
'fieldname': 'project',
'transactions': [
{
'label': _('Project'),
'items': ['Task', 'Timesheet', 'Expense Claim', 'Issue']
},
{
'label': _('Material'),
'items': ['Material Request', 'BOM', 'Stock Entry']
},
{
'label': _('Sales'),
'items': ['Sales Order', 'Delivery Note', 'Sales Invoice']
},
{
'label': _('Purchase'),
'items': ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']
},
]
}
def get_data():
return {
'heatmap': True,
'heatmap_message': _('This is based on the Time Sheets created against this project'),
'fieldname': 'project',
'transactions': [
{
'label': _('Project'),
'items': ['Task', 'Timesheet', 'Expense Claim', 'Issue']
},
{
'label': _('Material'),
'items': ['Material Request', 'BOM', 'Stock Entry']
},
{
'label': _('Sales'),
'items': ['Sales Order', 'Delivery Note', 'Sales Invoice']
},
{
'label': _('Purchase'),
'items': ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']
},
]
}

View File

@@ -1,15 +1,16 @@
from frappe import _
data = {
'heatmap': True,
'heatmap_message': _('This is based on the attendance of this Student'),
'fieldname': 'student',
'transactions': [
{
'items': ['Student Log', 'Student Group', 'Student Attendance']
},
{
'items': ['Program Enrollment', 'Fees', 'Assessment', 'Guardian']
}
]
}
def get_data():
{
'heatmap': True,
'heatmap_message': _('This is based on the attendance of this Student'),
'fieldname': 'student',
'transactions': [
{
'items': ['Student Log', 'Student Group', 'Student Attendance']
},
{
'items': ['Program Enrollment', 'Fees', 'Assessment', 'Guardian']
}
]
}

View File

@@ -1,25 +1,26 @@
from frappe import _
data = {
'heatmap': True,
'heatmap_message': _('This is based on transactions against this Customer. See timeline below for details'),
'fieldname': 'customer',
'transactions': [
{
'label': _('Pre Sales'),
'items': ['Opportunity', 'Quotation']
},
{
'label': _('Orders'),
'items': ['Sales Order', 'Delivery Note', 'Sales Invoice']
},
{
'label': _('Support'),
'items': ['Issue']
},
{
'label': _('Projects'),
'items': ['Project']
}
]
}
def get_data():
return {
'heatmap': True,
'heatmap_message': _('This is based on transactions against this Customer. See timeline below for details'),
'fieldname': 'customer',
'transactions': [
{
'label': _('Pre Sales'),
'items': ['Opportunity', 'Quotation']
},
{
'label': _('Orders'),
'items': ['Sales Order', 'Delivery Note', 'Sales Invoice']
},
{
'label': _('Support'),
'items': ['Issue']
},
{
'label': _('Projects'),
'items': ['Project']
}
]
}

View File

@@ -1,11 +1,12 @@
from frappe import _
data = {
'fieldname': 'prevdoc_docname',
'transactions': [
{
'label': _('Related'),
'items': ['Sales Order']
},
]
}
def get_data():
return {
'fieldname': 'prevdoc_docname',
'transactions': [
{
'label': _('Related'),
'items': ['Sales Order']
},
]
}

View File

@@ -442,6 +442,11 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False):
target.amount = flt(source.amount) - flt(source.billed_amt)
target.base_amount = target.amount * flt(source_parent.conversion_rate)
target.qty = target.amount / flt(source.rate) if (source.rate and source.billed_amt) else source.qty
item = frappe.db.get_value("Item", target.item_code, ["item_group", "selling_cost_center"], as_dict=1)
target.cost_center = frappe.db.get_value("Project", obj.project, "cost_center") \
or item.selling_cost_center \
or frappe.db.get_value("Item Group", item.item_group, "default_cost_center")
doclist = get_mapped_doc("Sales Order", source_name, {
"Sales Order": {

View File

@@ -1,33 +1,34 @@
from frappe import _
data = {
'fieldname': 'sales_order',
'non_standard_fieldnames': {
'Delivery Note': 'against_sales_order',
},
'internal_links': {
'Quotation': ['items', 'prevdoc_docname']
},
'transactions': [
{
'label': _('Fulfillment'),
'items': ['Sales Invoice', 'Delivery Note']
def get_data():
return {
'fieldname': 'sales_order',
'non_standard_fieldnames': {
'Delivery Note': 'against_sales_order',
},
{
'label': _('Purchasing'),
'items': ['Material Request', 'Purchase Order']
'internal_links': {
'Quotation': ['items', 'prevdoc_docname']
},
{
'label': _('Projects'),
'items': ['Project']
},
{
'label': _('Manufacturing'),
'items': ['Production Order']
},
{
'label': _('Reference'),
'items': ['Quotation']
},
]
}
'transactions': [
{
'label': _('Fulfillment'),
'items': ['Sales Invoice', 'Delivery Note']
},
{
'label': _('Purchasing'),
'items': ['Material Request', 'Purchase Order']
},
{
'label': _('Projects'),
'items': ['Project']
},
{
'label': _('Manufacturing'),
'items': ['Production Order']
},
{
'label': _('Reference'),
'items': ['Quotation']
},
]
}

View File

@@ -1,26 +1,27 @@
from frappe import _
data = {
'fieldname': 'delivery_note_no',
'non_standard_fieldnames': {
'Sales Invoice': 'delivery_note',
'Packing Slip': 'delivery_note',
},
'internal_links': {
'Sales Order': ['items', 'against_sales_order'],
},
'transactions': [
{
'label': _('Related'),
'items': ['Sales Invoice', 'Packing Slip']
def get_data():
return {
'fieldname': 'delivery_note_no',
'non_standard_fieldnames': {
'Sales Invoice': 'delivery_note',
'Packing Slip': 'delivery_note',
},
{
'label': _('Reference'),
'items': ['Sales Order', 'Quality Inspection']
'internal_links': {
'Sales Order': ['items', 'against_sales_order'],
},
{
'label': _('Returns'),
'items': ['Stock Entry']
},
]
}
'transactions': [
{
'label': _('Related'),
'items': ['Sales Invoice', 'Packing Slip']
},
{
'label': _('Reference'),
'items': ['Sales Order', 'Quality Inspection']
},
{
'label': _('Returns'),
'items': ['Stock Entry']
},
]
}

View File

@@ -1,45 +1,46 @@
from frappe import _
data = {
'heatmap': True,
'heatmap_message': _('This is based on stock movement. See {0} for details')\
.format('<a href="#query-report/Stock Ledger">' + _('Stock Ledger') + '</a>'),
'fieldname': 'item_code',
'non_standard_fieldnames': {
'Production Order': 'production_item',
'Product Bundle': 'new_item_code',
'BOM': 'item',
'Batch': 'item'
},
'transactions': [
{
'label': _('Groups'),
'items': ['BOM', 'Product Bundle']
def get_data():
return {
'heatmap': True,
'heatmap_message': _('This is based on stock movement. See {0} for details')\
.format('<a href="#query-report/Stock Ledger">' + _('Stock Ledger') + '</a>'),
'fieldname': 'item_code',
'non_standard_fieldnames': {
'Production Order': 'production_item',
'Product Bundle': 'new_item_code',
'BOM': 'item',
'Batch': 'item'
},
{
'label': _('Pricing'),
'items': ['Item Price', 'Pricing Rule']
},
{
'label': _('Sell'),
'items': ['Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice']
},
{
'label': _('Buy'),
'items': ['Material Request', 'Supplier Quotation', 'Request for Quotation',
'Purchase Order', 'Purchase Invoice']
},
{
'label': _('Traceability'),
'items': ['Serial No', 'Batch']
},
{
'label': _('Move'),
'items': ['Stock Entry']
},
{
'label': _('Manufacture'),
'items': ['Production Order']
}
]
}
'transactions': [
{
'label': _('Groups'),
'items': ['BOM', 'Product Bundle']
},
{
'label': _('Pricing'),
'items': ['Item Price', 'Pricing Rule']
},
{
'label': _('Sell'),
'items': ['Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice']
},
{
'label': _('Buy'),
'items': ['Material Request', 'Supplier Quotation', 'Request for Quotation',
'Purchase Order', 'Purchase Invoice']
},
{
'label': _('Traceability'),
'items': ['Serial No', 'Batch']
},
{
'label': _('Move'),
'items': ['Stock Entry']
},
{
'label': _('Manufacture'),
'items': ['Production Order']
}
]
}

View File

@@ -1,11 +1,12 @@
from frappe import _
data = {
'fieldname': 'material_request',
'transactions': [
{
'label': _('Related'),
'items': ['Request for Quotation', 'Supplier Quotation', 'Purchase Order']
},
]
}
def get_data():
return {
'fieldname': 'material_request',
'transactions': [
{
'label': _('Related'),
'items': ['Request for Quotation', 'Supplier Quotation', 'Purchase Order']
},
]
}

View File

@@ -1,28 +1,29 @@
from frappe import _
data = {
'fieldname': 'purchase_receipt_no',
'non_standard_fieldnames': {
'Purchase Invoice': 'purchase_receipt',
'Landed Cost Voucher': 'receipt_document'
},
'internal_links': {
'Purchase Order': ['items', 'purchase_order'],
'Project': ['items', 'project'],
'Quality Inspection': ['items', 'qa_no'],
},
'transactions': [
{
'label': _('Related'),
'items': ['Purchase Invoice', 'Landed Cost Voucher']
def get_data():
return {
'fieldname': 'purchase_receipt_no',
'non_standard_fieldnames': {
'Purchase Invoice': 'purchase_receipt',
'Landed Cost Voucher': 'receipt_document'
},
{
'label': _('Reference'),
'items': ['Purchase Order', 'Quality Inspection', 'Project']
'internal_links': {
'Purchase Order': ['items', 'purchase_order'],
'Project': ['items', 'project'],
'Quality Inspection': ['items', 'qa_no'],
},
{
'label': _('Returns'),
'items': ['Stock Entry']
},
]
}
'transactions': [
{
'label': _('Related'),
'items': ['Purchase Invoice', 'Landed Cost Voucher']
},
{
'label': _('Reference'),
'items': ['Purchase Order', 'Quality Inspection', 'Project']
},
{
'label': _('Returns'),
'items': ['Stock Entry']
},
]
}