Fixed merge conflict
This commit is contained in:
commit
fa1cdd5bf0
@ -10,6 +10,7 @@
|
|||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
"document_type": "Setup",
|
"document_type": "Setup",
|
||||||
|
"editable_grid": 0,
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
@ -249,14 +250,15 @@
|
|||||||
"hide_toolbar": 0,
|
"hide_toolbar": 0,
|
||||||
"icon": "icon-money",
|
"icon": "icon-money",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"in_create": 0,
|
"image_view": 0,
|
||||||
|
"in_create": 1,
|
||||||
"in_dialog": 0,
|
"in_dialog": 0,
|
||||||
"is_submittable": 0,
|
"is_submittable": 0,
|
||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2016-05-16 15:23:14.770933",
|
"modified": "2016-10-18 14:22:00.207907",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Cost Center",
|
"name": "Cost Center",
|
||||||
@ -368,6 +370,5 @@
|
|||||||
"read_only_onload": 0,
|
"read_only_onload": 0,
|
||||||
"search_fields": "parent_cost_center, is_group",
|
"search_fields": "parent_cost_center, is_group",
|
||||||
"sort_order": "ASC",
|
"sort_order": "ASC",
|
||||||
"track_seen": 0,
|
"track_seen": 0
|
||||||
"version": 0
|
|
||||||
}
|
}
|
@ -71,7 +71,7 @@ class PurchaseInvoice(BuyingController):
|
|||||||
frappe.throw(_("Cash or Bank Account is mandatory for making payment entry"))
|
frappe.throw(_("Cash or Bank Account is mandatory for making payment entry"))
|
||||||
|
|
||||||
if flt(self.paid_amount) + flt(self.write_off_amount) \
|
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"""))
|
frappe.throw(_("""Paid amount + Write Off Amount can not be greater than Grand Total"""))
|
||||||
|
|
||||||
def create_remarks(self):
|
def create_remarks(self):
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'fieldname': 'purchase_invoice',
|
'fieldname': 'purchase_invoice',
|
||||||
'non_standard_fieldnames': {
|
'non_standard_fieldnames': {
|
||||||
'Delivery Note': 'against_sales_invoice',
|
'Delivery Note': 'against_sales_invoice',
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'fieldname': 'sales_invoice',
|
'fieldname': 'sales_invoice',
|
||||||
'non_standard_fieldnames': {
|
'non_standard_fieldnames': {
|
||||||
'Delivery Note': 'against_sales_invoice',
|
'Delivery Note': 'against_sales_invoice',
|
||||||
|
@ -93,7 +93,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
|||||||
me.get_data_from_server(function(){
|
me.get_data_from_server(function(){
|
||||||
me.load_data(false);
|
me.load_data(false);
|
||||||
me.make_customer();
|
me.make_customer();
|
||||||
me.make_item_list(true);
|
me.make_item_list();
|
||||||
me.set_missing_values();
|
me.set_missing_values();
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@ -269,7 +269,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
|||||||
make: function() {
|
make: function() {
|
||||||
this.make_search();
|
this.make_search();
|
||||||
this.make_customer();
|
this.make_customer();
|
||||||
this.make_item_list(true);
|
this.make_item_list();
|
||||||
this.make_discount_field()
|
this.make_discount_field()
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
|||||||
this.search.$input.on("keyup", function() {
|
this.search.$input.on("keyup", function() {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
me.items = me.get_items();
|
me.items = me.get_items();
|
||||||
me.make_item_list(false);
|
me.make_item_list();
|
||||||
}, 1000);
|
}, 1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -375,7 +375,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
make_item_list: function(index_search) {
|
make_item_list: function() {
|
||||||
var me = this;
|
var me = this;
|
||||||
if(!this.price_list) {
|
if(!this.price_list) {
|
||||||
msgprint(__("Price List not found or disabled"));
|
msgprint(__("Price List not found or disabled"));
|
||||||
@ -389,7 +389,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
|||||||
|
|
||||||
if (this.items) {
|
if (this.items) {
|
||||||
$.each(this.items, function(index, obj) {
|
$.each(this.items, function(index, obj) {
|
||||||
if(!index_search || index < 16){
|
if(index < 30){
|
||||||
$(frappe.render_template("pos_item", {
|
$(frappe.render_template("pos_item", {
|
||||||
item_code: obj.name,
|
item_code: obj.name,
|
||||||
item_price: format_currency(obj.price_list_rate, obj.currency),
|
item_price: format_currency(obj.price_list_rate, obj.currency),
|
||||||
@ -435,7 +435,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
|||||||
|
|
||||||
key = this.search.$input.val().toLowerCase();
|
key = this.search.$input.val().toLowerCase();
|
||||||
var re = new RegExp('%', 'g');
|
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
|
search_status = true
|
||||||
|
|
||||||
if(key){
|
if(key){
|
||||||
|
@ -303,6 +303,11 @@ def make_purchase_invoice(source_name, target_doc=None):
|
|||||||
target.base_amount = target.amount * flt(source_parent.conversion_rate)
|
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)
|
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, {
|
doc = get_mapped_doc("Purchase Order", source_name, {
|
||||||
"Purchase Order": {
|
"Purchase Order": {
|
||||||
"doctype": "Purchase Invoice",
|
"doctype": "Purchase Invoice",
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'fieldname': 'purchase_order',
|
'fieldname': 'purchase_order',
|
||||||
'internal_links': {
|
'internal_links': {
|
||||||
'Material Request': ['items', 'material_request'],
|
'Material Request': ['items', 'material_request'],
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'docstatus': 1,
|
'docstatus': 1,
|
||||||
'fieldname': 'request_for_quotation',
|
'fieldname': 'request_for_quotation',
|
||||||
'transactions': [
|
'transactions': [
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'heatmap': True,
|
'heatmap': True,
|
||||||
'heatmap_message': _('This is based on transactions against this Supplier. See timeline below for details'),
|
'heatmap_message': _('This is based on transactions against this Supplier. See timeline below for details'),
|
||||||
'fieldname': 'supplier',
|
'fieldname': 'supplier',
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'fieldname': 'supplier_quotation',
|
'fieldname': 'supplier_quotation',
|
||||||
'internal_links': {
|
'internal_links': {
|
||||||
'Material Request': ['items', 'material_request'],
|
'Material Request': ['items', 'material_request'],
|
||||||
|
@ -338,7 +338,7 @@ class calculate_taxes_and_totals(object):
|
|||||||
tax.item_wise_tax_detail = json.dumps(tax.item_wise_tax_detail, separators=(',', ':'))
|
tax.item_wise_tax_detail = json.dumps(tax.item_wise_tax_detail, separators=(',', ':'))
|
||||||
|
|
||||||
def set_discount_amount(self):
|
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.discount_amount = flt(flt(self.doc.get(scrub(self.doc.apply_discount_on)))
|
||||||
* self.doc.additional_discount_percentage / 100, self.doc.precision("discount_amount"))
|
* self.doc.additional_discount_percentage / 100, self.doc.precision("discount_amount"))
|
||||||
|
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
'fieldname': 'opportunity',
|
return {
|
||||||
'non_standard_fieldnames': {
|
'fieldname': 'prevdoc_docname',
|
||||||
'Quotation': 'prevdoc_docname'
|
|
||||||
},
|
|
||||||
'transactions': [
|
'transactions': [
|
||||||
{
|
{
|
||||||
'label': _('Related'),
|
'label': _('Related'),
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 38 KiB |
BIN
erpnext/docs/assets/img/buying/material-request-flowchart.png
Normal file
BIN
erpnext/docs/assets/img/buying/material-request-flowchart.png
Normal file
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 |
@ -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
|
income will be for that year, and can adjust their expenses to maintain their
|
||||||
desired profit margins.
|
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">
|
<img class="screenshot" alt="Fiscal Year" src="{{docs_base_url}}/assets/img/accounts/fiscal-year.png">
|
||||||
|
|
||||||
{next}
|
{next}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
A Material Request is a simple document identifying a requirement of a set of
|
A Material Request is a simple document identifying a requirement of a set of
|
||||||
Items (products or services) for a particular reason.
|
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:
|
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.
|
* Material Issue - If the requested material is to be Issued.
|
||||||
* Manufacture - If the requested material is to be Produced.
|
* 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
|
> Info: Material Request is not mandatory. It is ideal if you have centralized
|
||||||
buying so that you can collect this information from various departments.
|
buying so that you can collect this information from various departments.
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'heatmap': True,
|
'heatmap': True,
|
||||||
'heatmap_message': _('This is based on the attendance of this Employee'),
|
'heatmap_message': _('This is based on the attendance of this Employee'),
|
||||||
'fieldname': 'employee',
|
'fieldname': 'employee',
|
||||||
|
@ -58,6 +58,7 @@ class ProductionOrder(Document):
|
|||||||
if so[0].project:
|
if so[0].project:
|
||||||
self.project = so[0].project
|
self.project = so[0].project
|
||||||
|
|
||||||
|
if not self.material_request:
|
||||||
self.validate_production_order_against_so()
|
self.validate_production_order_against_so()
|
||||||
else:
|
else:
|
||||||
frappe.throw(_("Sales Order {0} is not valid").format(self.sales_order))
|
frappe.throw(_("Sales Order {0} is not valid").format(self.sales_order))
|
||||||
|
@ -473,6 +473,7 @@ class ProductionPlanningTool(Document):
|
|||||||
material_request.update({"material_request_type": item_wrapper.default_material_request_type})
|
material_request.update({"material_request_type": item_wrapper.default_material_request_type})
|
||||||
|
|
||||||
for sales_order, requested_qty in items_to_be_requested[item].items():
|
for sales_order, requested_qty in items_to_be_requested[item].items():
|
||||||
|
if sales_order != 'No Sales Order':
|
||||||
material_request.append("items", {
|
material_request.append("items", {
|
||||||
"doctype": "Material Request Item",
|
"doctype": "Material Request Item",
|
||||||
"__islocal": 1,
|
"__islocal": 1,
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'heatmap': True,
|
'heatmap': True,
|
||||||
'heatmap_message': _('This is based on the Time Sheets created against this project'),
|
'heatmap_message': _('This is based on the Time Sheets created against this project'),
|
||||||
'fieldname': 'project',
|
'fieldname': 'project',
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
{
|
||||||
'heatmap': True,
|
'heatmap': True,
|
||||||
'heatmap_message': _('This is based on the attendance of this Student'),
|
'heatmap_message': _('This is based on the attendance of this Student'),
|
||||||
'fieldname': 'student',
|
'fieldname': 'student',
|
||||||
@ -9,7 +10,7 @@ data = {
|
|||||||
'items': ['Student Log', 'Student Group', 'Student Attendance']
|
'items': ['Student Log', 'Student Group', 'Student Attendance']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'items': ['Program Enrollment', 'Fees', 'Assessment']
|
'items': ['Program Enrollment', 'Fees', 'Assessment', 'Guardian']
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'heatmap': True,
|
'heatmap': True,
|
||||||
'heatmap_message': _('This is based on transactions against this Customer. See timeline below for details'),
|
'heatmap_message': _('This is based on transactions against this Customer. See timeline below for details'),
|
||||||
'fieldname': 'customer',
|
'fieldname': 'customer',
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'fieldname': 'prevdoc_docname',
|
'fieldname': 'prevdoc_docname',
|
||||||
'transactions': [
|
'transactions': [
|
||||||
{
|
{
|
||||||
|
@ -443,6 +443,11 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False):
|
|||||||
target.base_amount = target.amount * flt(source_parent.conversion_rate)
|
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
|
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, {
|
doclist = get_mapped_doc("Sales Order", source_name, {
|
||||||
"Sales Order": {
|
"Sales Order": {
|
||||||
"doctype": "Sales Invoice",
|
"doctype": "Sales Invoice",
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'fieldname': 'sales_order',
|
'fieldname': 'sales_order',
|
||||||
'non_standard_fieldnames': {
|
'non_standard_fieldnames': {
|
||||||
'Delivery Note': 'against_sales_order',
|
'Delivery Note': 'against_sales_order',
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'fieldname': 'delivery_note_no',
|
'fieldname': 'delivery_note_no',
|
||||||
'non_standard_fieldnames': {
|
'non_standard_fieldnames': {
|
||||||
'Sales Invoice': 'delivery_note',
|
'Sales Invoice': 'delivery_note',
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'heatmap': True,
|
'heatmap': True,
|
||||||
'heatmap_message': _('This is based on stock movement. See {0} for details')\
|
'heatmap_message': _('This is based on stock movement. See {0} for details')\
|
||||||
.format('<a href="#query-report/Stock Ledger">' + _('Stock Ledger') + '</a>'),
|
.format('<a href="#query-report/Stock Ledger">' + _('Stock Ledger') + '</a>'),
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
|
||||||
|
def get_data():
|
||||||
|
return {
|
||||||
'fieldname': 'material_request',
|
'fieldname': 'material_request',
|
||||||
'transactions': [
|
'transactions': [
|
||||||
{
|
{
|
||||||
@ -10,6 +12,6 @@ data = {
|
|||||||
{
|
{
|
||||||
'label': _('Manufacturing'),
|
'label': _('Manufacturing'),
|
||||||
'items': ['Production Order']
|
'items': ['Production Order']
|
||||||
},
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
data = {
|
def get_data():
|
||||||
|
return {
|
||||||
'fieldname': 'purchase_receipt_no',
|
'fieldname': 'purchase_receipt_no',
|
||||||
'non_standard_fieldnames': {
|
'non_standard_fieldnames': {
|
||||||
'Purchase Invoice': 'purchase_receipt',
|
'Purchase Invoice': 'purchase_receipt',
|
||||||
|
Loading…
Reference in New Issue
Block a user