Merge branch 'develop' into customs_tariff_number
This commit is contained in:
commit
6c3eb36c35
40
.github/CONTRIBUTING.md
vendored
40
.github/CONTRIBUTING.md
vendored
@ -1,52 +1,58 @@
|
||||
##General Overview
|
||||
## General Overview
|
||||
|
||||
We have three branches where all the work happens:
|
||||
There are three branches where all the work happens:
|
||||
|
||||
* **master** - This is the stable branch based on which we do releases. This branch is for production.
|
||||
* **develop** - This is an unstable branch for development purposes, it has bleeding edge features and fixes, but it's not recommended for production. Bug fixes and new features go here.
|
||||
* **hotfix** - This is a branch dedicated to hotfixes on the master branch. Urgent bug fixes go here.
|
||||
* **master** - This is the production / stable branch for releases.
|
||||
* **develop** - This is bleeding edge with features and fixes. Non critical bug fixes and new features go here. All updates to master also get pushed to develop.
|
||||
* **hotfix** - Urgent bug fixes go here. This is merged into master for releases.
|
||||
|
||||
## Release Cycles
|
||||
|
||||
Once we deem the develop branch to be stable, we merge it into the master and do a major release. The hotfix branch is solely for making urgent bug fixes on the current master branch, which we then merge into master.
|
||||
|
||||
We almost never push directly to master.
|
||||
Usually, hotfix / develop is pushed to master roughly every week.
|
||||
|
||||
If we are close to a major release, then all bugfixes get pushed to hotfix and a release is done every week or as necessary.
|
||||
|
||||
***
|
||||
|
||||
|
||||
##Workflow
|
||||
## Contributing
|
||||
|
||||
Contributing to ERPNext is not very different from the usual Pull Request workflow on GitHub.
|
||||
|
||||
###Prerequisites :
|
||||
### Prerequisites :
|
||||
|
||||
* You need to know [Git and Github basics](https://try.github.io/levels/1/challenges/1)
|
||||
* You need to have a Fork of the [ERPNext repo](https://github.com/frappe/erpnext) in your personal Github account
|
||||
* You need to add a [remote](#glossary) for your Forked repository. `git remote add origin [your-erpnext-repo-url]`
|
||||
|
||||
|
||||
###The Process:
|
||||
### The Process:
|
||||
|
||||
1. Make sure you're in the right branch. **develop** for adding features / fixing issues and **hotfix** for urgent bug fixes
|
||||
2. Make your changes
|
||||
3. Create and checkout a new branch for the changes you've made. `git checkout -b [branch-name]`
|
||||
4. Add and commit your changes `git commit -am "[commit-message]"
|
||||
5. If you have been working on sometime for a long time, you should [rebase](#glossary) your branch with our develop branch. `git pull upstream develop --rebase` where `upstream` is the remote name of our repo
|
||||
5. If you have been working on sometime for a long time, you should [rebase](#glossary) your branch with main develop branch. `git pull upstream develop --rebase` where `upstream` is the remote name of our repo
|
||||
6. Now, push your changes to your fork. `git push origin [branch-name]`
|
||||
If you rebased your commits, you will have to [force push](http://vignette2.wikia.nocookie.net/starwars/images/e/ea/Yodapush.png/revision/latest?cb=20130205190454) `git push origin [branch-name] --force`
|
||||
7. You should now be able to see your pushed branch on Github, now create a pull request against the branch that you want to merge to.
|
||||
8. Wait for us to review it
|
||||
|
||||
###Common Problems:
|
||||
### Your Pull Request Should have
|
||||
|
||||
1. Clear explanation of the use case
|
||||
1. Screenshots / Screecast GIF
|
||||
1. Test Cases (if applicable)
|
||||
1. Update to documentation
|
||||
|
||||
### Common Problems:
|
||||
|
||||
* During rebase you might face _merge conflicts_. A merge conflict occurs when you have made changes to the same file that someone else has, in the commits you're pulling. You need to resolve these conflicts by picking which code you want to keep, yours or theirs. You can use `git mergetool` for help.
|
||||
* Sometimes you don't have a local branch to which you want to make changes to. In that case you first run `git fetch` followed by `git checkout --track -b upstream/[branch-name]`
|
||||
|
||||
|
||||
###Good practices:
|
||||
### Good practices:
|
||||
|
||||
* You should rebase your branch with the branch you plan to make a Pull Request to as often as you can.
|
||||
* You should rebase your branch with the branch you plan to make a Pull Request (PR) to as often as you can.
|
||||
* Your commit messages should be precise and explain exactly what the commit does. Same goes for the Pull Request title.
|
||||
* When making a PR make sure that all your code is committed properly by checking the diffs.
|
||||
* If you're working on different things at the same time, make sure you make separate branches for each.
|
||||
@ -55,7 +61,7 @@ If you rebased your commits, you will have to [force push](http://vignette2.wiki
|
||||
* Tabs, not spaces.
|
||||
|
||||
|
||||
###Glossary
|
||||
### Glossary
|
||||
|
||||
* remote - A remote is a connection to a Github repo. You should have two remotes, one that points to your repo and one to ours.
|
||||
* rebase - When you rebase a branch, you pull commits from your remote branch and move your commits on top of it. This allows you to update your branch with the latest changes without losing your changes.
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
__version__ = '7.2.30'
|
||||
__version__ = '7.2.31'
|
||||
|
||||
def get_default_company(user=None):
|
||||
'''Get default company for user'''
|
||||
|
||||
@ -115,8 +115,8 @@ class Asset(Document):
|
||||
def set_accumulated_depreciation(self):
|
||||
accumulated_depreciation = flt(self.opening_accumulated_depreciation)
|
||||
for d in self.get("schedules"):
|
||||
accumulated_depreciation += flt(d.depreciation_amount)
|
||||
d.accumulated_depreciation_amount = accumulated_depreciation
|
||||
accumulated_depreciation += flt(d.depreciation_amount, d.precision("depreciation_amount"))
|
||||
d.accumulated_depreciation_amount = flt(accumulated_depreciation, d.precision("accumulated_depreciation_amount"))
|
||||
|
||||
def get_depreciation_amount(self, depreciable_value):
|
||||
if self.depreciation_method in ("Straight Line", "Manual"):
|
||||
|
||||
@ -209,6 +209,7 @@ function hide_fields(doc) {
|
||||
|
||||
cur_frm.cscript.update_stock = function(doc, dt, dn) {
|
||||
hide_fields(doc, dt, dn);
|
||||
this.frm.fields_dict.items.grid.toggle_reqd("item_code", doc.update_stock? true: false)
|
||||
}
|
||||
|
||||
cur_frm.fields_dict.cash_bank_account.get_query = function(doc) {
|
||||
|
||||
@ -157,6 +157,12 @@ class PurchaseInvoice(BuyingController):
|
||||
|
||||
super(PurchaseInvoice, self).validate_warehouse()
|
||||
|
||||
|
||||
def validate_item_code(self):
|
||||
for d in self.get('items'):
|
||||
if not d.item_code:
|
||||
frappe.msgprint(_("Item Code required at Row No {0}").format(d.idx), raise_exception=True)
|
||||
|
||||
def set_expense_account(self, for_validate=False):
|
||||
auto_accounting_for_stock = cint(frappe.defaults.get_global_default("auto_accounting_for_stock"))
|
||||
|
||||
@ -165,6 +171,7 @@ class PurchaseInvoice(BuyingController):
|
||||
stock_items = self.get_stock_items()
|
||||
|
||||
if self.update_stock:
|
||||
self.validate_item_code()
|
||||
self.validate_warehouse()
|
||||
warehouse_account = get_warehouse_account()
|
||||
|
||||
|
||||
@ -170,6 +170,9 @@ def get_customers_list(pos_profile):
|
||||
|
||||
def get_customers_address(customers):
|
||||
customer_address = {}
|
||||
if isinstance(customers, basestring):
|
||||
customers = [frappe._dict({'name': customers})]
|
||||
|
||||
for data in customers:
|
||||
address = frappe.db.sql(""" select name, address_line1, address_line2, city, state,
|
||||
email_id, phone, fax, pincode from `tabAddress` where is_primary_address =1 and name in
|
||||
@ -292,6 +295,7 @@ def make_invoice(doc_list={}, email_queue_list={}, customers_list={}):
|
||||
if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
|
||||
validate_records(doc)
|
||||
si_doc = frappe.new_doc('Sales Invoice')
|
||||
si_doc.due_date = doc.get('posting_date')
|
||||
si_doc.offline_pos_name = name
|
||||
si_doc.update(doc)
|
||||
submit_invoice(si_doc, name, doc)
|
||||
@ -328,10 +332,16 @@ def add_customer(name):
|
||||
customer_doc.flags.ignore_mandatory = True
|
||||
customer_doc.save(ignore_permissions = True)
|
||||
frappe.db.commit()
|
||||
return customer_doc.name
|
||||
|
||||
def make_address(args, customer):
|
||||
if args.get('name'):
|
||||
address = frappe.get_doc('Address', args.get('name'))
|
||||
if not args.get('address_line1'): return
|
||||
|
||||
name = args.get('name') or get_customers_address(customer)[customer].get("name")
|
||||
|
||||
if name:
|
||||
address = frappe.get_doc('Address', name)
|
||||
frappe.errprint(address)
|
||||
else:
|
||||
address = frappe.new_doc('Address')
|
||||
address.country = frappe.db.get_value('Company', args.get('company'), 'country')
|
||||
|
||||
@ -325,6 +325,7 @@ cur_frm.cscript.hide_fields = function(doc) {
|
||||
|
||||
cur_frm.cscript.update_stock = function(doc, dt, dn) {
|
||||
cur_frm.cscript.hide_fields(doc, dt, dn);
|
||||
this.frm.fields_dict.items.grid.toggle_reqd("item_code", doc.update_stock? true: false)
|
||||
}
|
||||
|
||||
cur_frm.cscript['Make Delivery Note'] = function() {
|
||||
|
||||
@ -475,6 +475,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
this.pos_bill = this.wrapper.find('.pos-bill-wrapper').hide();
|
||||
this.list_customers = this.wrapper.find('.list-customers');
|
||||
this.numeric_keypad = this.wrapper.find('.numeric_keypad');
|
||||
this.list_customers_btn.addClass("view_customer")
|
||||
|
||||
me.render_list_customers();
|
||||
me.toggle_totals_area(false);
|
||||
@ -495,9 +496,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
me.toggle_totals_area(false);
|
||||
me.toggle_delete_button()
|
||||
me.list_customers.hide();
|
||||
if(me.frm.doc.items.length > 0) {
|
||||
me.numeric_keypad.show();
|
||||
}
|
||||
me.numeric_keypad.show();
|
||||
}
|
||||
});
|
||||
this.add_customer_btn.on('click', function() {
|
||||
@ -694,7 +693,8 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
.get(0);
|
||||
}
|
||||
});
|
||||
var customers = this.customers.map(function (c) {
|
||||
|
||||
this.customers_mapper = this.customers.map(function (c) {
|
||||
return {
|
||||
label: c.name,
|
||||
value: c.name,
|
||||
@ -703,7 +703,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
}
|
||||
});
|
||||
|
||||
customers.push({
|
||||
this.customers_mapper.push({
|
||||
label: "<span class='text-primary link-option'>"
|
||||
+ "<i class='fa fa-plus' style='margin-right: 5px;'></i> "
|
||||
+ __("Create a new Customer")
|
||||
@ -711,11 +711,11 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
value: 'is_action',
|
||||
action: me.add_customer
|
||||
});
|
||||
this.party_field.awesomeplete.list = customers;
|
||||
this.autocomplete_customers();
|
||||
|
||||
this.party_field.$input
|
||||
.on('input', function (e) {
|
||||
me.party_field.awesomeplete.list = customers;
|
||||
me.party_field.awesomeplete.list = this.customers_mapper;
|
||||
})
|
||||
.on('awesomplete-select', function (e) {
|
||||
var customer = me.party_field.awesomeplete
|
||||
@ -731,6 +731,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
me.update_customer_data(customer);
|
||||
me.refresh();
|
||||
me.set_focus();
|
||||
me.list_customers_btn.removeClass("view_customer");
|
||||
})
|
||||
.on('focus', function (e) {
|
||||
$(e.target).val('').trigger('input');
|
||||
@ -754,6 +755,10 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
});
|
||||
},
|
||||
|
||||
autocomplete_customers: function() {
|
||||
this.party_field.awesomeplete.list = this.customers_mapper;
|
||||
},
|
||||
|
||||
toggle_edit_button: function(flag) {
|
||||
this.page.wrapper.find('.edit-customer-btn').toggle(flag);
|
||||
},
|
||||
@ -768,10 +773,10 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
|
||||
add_customer: function() {
|
||||
this.frm.doc.customer = "";
|
||||
this.update_customer()
|
||||
this.update_customer(true)
|
||||
},
|
||||
|
||||
update_customer: function () {
|
||||
update_customer: function (new_customer) {
|
||||
var me = this;
|
||||
if (!this.connection_status) return;
|
||||
|
||||
@ -844,14 +849,14 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
this.render_address_data()
|
||||
|
||||
this.customer_doc.set_primary_action(__("Save"), function () {
|
||||
me.make_offline_customer();
|
||||
me.make_offline_customer(new_customer);
|
||||
me.pos_bill.show();
|
||||
});
|
||||
},
|
||||
|
||||
render_address_data: function() {
|
||||
var me = this;
|
||||
this.address_data = this.address[this.frm.doc.customer] || this.get_address_from_localstorage();
|
||||
this.address_data = this.address[this.frm.doc.customer];
|
||||
this.customer_doc.set_values(this.address_data)
|
||||
|
||||
if(!this.customer_doc.fields_dict.full_name.$input.val()) {
|
||||
@ -864,20 +869,32 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
return this.address_details[this.frm.doc.customer]
|
||||
},
|
||||
|
||||
make_offline_customer: function() {
|
||||
make_offline_customer: function(new_customer) {
|
||||
this.frm.doc.customer = this.frm.doc.customer || this.customer_doc.get_values().full_name;
|
||||
this.customer_details = this.get_customers_details();
|
||||
this.customer_details[this.frm.doc.customer] = this.get_prompt_details();
|
||||
this.party_field.$input.val(this.frm.doc.customer);
|
||||
this.customers.push({
|
||||
name: this.frm.doc.customer,
|
||||
customer_name: this.frm.doc.customer
|
||||
});
|
||||
this.update_address_and_customer_list(new_customer)
|
||||
this.autocomplete_customers();
|
||||
this.update_customer_in_localstorage()
|
||||
this.update_customer_in_localstorage()
|
||||
this.customer_doc.hide()
|
||||
},
|
||||
|
||||
update_address_and_customer_list: function(new_customer) {
|
||||
var me = this;
|
||||
if(new_customer) {
|
||||
this.customers_mapper.push({
|
||||
label: this.frm.doc.customer,
|
||||
value: this.frm.doc.customer,
|
||||
customer_group: "",
|
||||
territory: ""
|
||||
});
|
||||
}
|
||||
|
||||
this.address[this.frm.doc.customer] = this.customer_doc.get_values();
|
||||
},
|
||||
|
||||
get_prompt_details: function() {
|
||||
this.prompt_details = this.customer_doc.get_values();
|
||||
this.prompt_details['country'] = this.pos_profile_data.country;
|
||||
@ -1072,7 +1089,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
// if form is local then allow this function
|
||||
// $(me.wrapper).find(".pos-item-wrapper").on("click", function () {
|
||||
$(this.wrapper).on("click", ".pos-item-wrapper", function () {
|
||||
if(me.list_customers_btn.hasClass("view_customer")) return;
|
||||
if($(me.pos_bill).is(":hidden")) return;
|
||||
|
||||
me.customer_validate();
|
||||
if (me.frm.doc.docstatus == 0) {
|
||||
@ -1221,7 +1238,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
|
||||
customer_validate: function () {
|
||||
var me = this;
|
||||
if (!this.frm.doc.customer) {
|
||||
if (!this.frm.doc.customer || this.party_field.get_value() == "") {
|
||||
frappe.throw(__("Please select customer"))
|
||||
}
|
||||
},
|
||||
@ -1339,7 +1356,8 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
projected_qty: d.projected_qty,
|
||||
rate: format_number(d.rate, me.frm.doc.currency),
|
||||
enabled: me.pos_profile_data["allow_user_to_edit_rate"] ? true : false,
|
||||
amount: format_currency(d.amount, me.frm.doc.currency)
|
||||
amount: format_currency(d.amount, me.frm.doc.currency),
|
||||
selected_class: (me.item_code == d.item_code) ? "active" : ""
|
||||
})).appendTo($items);
|
||||
});
|
||||
|
||||
@ -1457,12 +1475,14 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
|
||||
sn = data.serial_no.split('\n')
|
||||
if(sn.length) {
|
||||
serial_no_list = me.serial_no_data[data.item_code]
|
||||
$.each(sn, function(i, serial_no) {
|
||||
if(in_list(Object.keys(serial_no_list), serial_no)) {
|
||||
delete serial_no_list[serial_no]
|
||||
}
|
||||
})
|
||||
me.serial_no_data[data.item_code] = serial_no_list;
|
||||
if(serial_no_list) {
|
||||
$.each(sn, function(i, serial_no) {
|
||||
if(in_list(Object.keys(serial_no_list), serial_no)) {
|
||||
delete serial_no_list[serial_no]
|
||||
}
|
||||
})
|
||||
me.serial_no_data[data.item_code] = serial_no_list;
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
@ -75,8 +75,8 @@ def get_fiscal_years(transaction_date=None, fiscal_year=None, label="Date", verb
|
||||
if verbose==1: frappe.msgprint(error_msg)
|
||||
raise FiscalYearError, error_msg
|
||||
|
||||
def validate_fiscal_year(date, fiscal_year, company, label=_("Date"), doc=None):
|
||||
years = [f[0] for f in get_fiscal_years(date, label=label, company=company)]
|
||||
def validate_fiscal_year(date, fiscal_year, company, label="Date", doc=None):
|
||||
years = [f[0] for f in get_fiscal_years(date, label=_(label), company=company)]
|
||||
if fiscal_year not in years:
|
||||
if doc:
|
||||
doc.fiscal_year = years[0]
|
||||
|
||||
@ -109,7 +109,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
||||
|
||||
qty: function(doc, cdt, cdn) {
|
||||
var item = frappe.get_doc(cdt, cdn);
|
||||
if ((doc.doctype == "Purchase Receipt") || (doc.doctype == "Purchase Invoice" && doc.update_stock)) {
|
||||
if ((doc.doctype == "Purchase Receipt") || (doc.doctype == "Purchase Invoice" && (doc.update_stock || doc.is_return))) {
|
||||
frappe.model.round_floats_in(item, ["qty", "received_qty"]);
|
||||
|
||||
if(!doc.is_return && this.validate_negative_quantity(cdt, cdn, item, ["qty", "received_qty"])){ return }
|
||||
|
||||
@ -42,8 +42,10 @@ def make_variant_based_on_manufacturer(template, manufacturer, manufacturer_part
|
||||
|
||||
copy_attributes_to_variant(template, variant)
|
||||
|
||||
variant.manufacturer = manufacturer
|
||||
variant.manufacturer_part_no = manufacturer_part_no
|
||||
variant.append("manufacturers", {
|
||||
"manufacturer": manufacturer,
|
||||
"manufacturer_part_no": manufacturer_part_no
|
||||
})
|
||||
|
||||
variant.item_code = append_number_if_name_exists('Item', template.name)
|
||||
|
||||
|
||||
@ -273,6 +273,12 @@ $.extend(cur_frm.cscript, {
|
||||
});
|
||||
},
|
||||
|
||||
use_multi_level_bom: function() {
|
||||
if(this.frm.doc.bom_no) {
|
||||
this.frm.trigger("bom_no");
|
||||
}
|
||||
},
|
||||
|
||||
qty: function() {
|
||||
frappe.ui.form.trigger("Production Order", 'bom_no')
|
||||
},
|
||||
|
||||
@ -213,12 +213,29 @@ class ProductionOrder(Document):
|
||||
|
||||
def set_production_order_operations(self):
|
||||
"""Fetch operations from BOM and set in 'Production Order'"""
|
||||
if not self.bom_no or cint(frappe.db.get_single_value("Manufacturing Settings", "disable_capacity_planning")):
|
||||
return
|
||||
|
||||
if not self.bom_no \
|
||||
or cint(frappe.db.get_single_value("Manufacturing Settings", "disable_capacity_planning")):
|
||||
return
|
||||
|
||||
self.set('operations', [])
|
||||
operations = frappe.db.sql("""select operation, description, workstation, idx,
|
||||
base_hour_rate as hour_rate, time_in_mins, "Pending" as status from `tabBOM Operation`
|
||||
where parent = %s order by idx""", self.bom_no, as_dict=1)
|
||||
|
||||
if self.use_multi_level_bom:
|
||||
bom_list = frappe.get_doc("BOM", self.bom_no).traverse_tree()
|
||||
else:
|
||||
bom_list = [self.bom_no]
|
||||
|
||||
operations = frappe.db.sql("""
|
||||
select
|
||||
operation, description, workstation, idx,
|
||||
base_hour_rate as hour_rate, time_in_mins,
|
||||
"Pending" as status, parent as bom
|
||||
from
|
||||
`tabBOM Operation`
|
||||
where
|
||||
parent in (%s) order by idx
|
||||
""" % ", ".join(["%s"]*len(bom_list)), tuple(bom_list), as_dict=1)
|
||||
|
||||
self.set('operations', operations)
|
||||
self.calculate_time()
|
||||
|
||||
@ -257,14 +274,15 @@ class ProductionOrder(Document):
|
||||
plan_days = frappe.db.get_single_value("Manufacturing Settings", "capacity_planning_for_days") or 30
|
||||
|
||||
timesheet = make_timesheet(self.name)
|
||||
workstation_list = []
|
||||
timesheet.set('time_logs', [])
|
||||
|
||||
for i, d in enumerate(self.operations):
|
||||
if d.workstation and d.status != 'Completed':
|
||||
self.set_start_end_time_for_workstation(d, workstation_list, i)
|
||||
|
||||
if d.status != 'Completed':
|
||||
self.set_start_end_time_for_workstation(d, i)
|
||||
|
||||
args = self.get_operations_data(d)
|
||||
|
||||
add_timesheet_detail(timesheet, args)
|
||||
original_start_time = d.planned_start_time
|
||||
|
||||
@ -291,7 +309,7 @@ class ProductionOrder(Document):
|
||||
if timesheet and open_new:
|
||||
return timesheet
|
||||
|
||||
if timesheet:
|
||||
if timesheet and timesheet.get("time_logs"):
|
||||
timesheet.save()
|
||||
timesheets.append(timesheet.name)
|
||||
|
||||
@ -312,7 +330,7 @@ class ProductionOrder(Document):
|
||||
'completed_qty': flt(self.qty) - flt(data.completed_qty)
|
||||
}
|
||||
|
||||
def set_start_end_time_for_workstation(self, data, workstation_list, index):
|
||||
def set_start_end_time_for_workstation(self, data, index):
|
||||
"""Set start and end time for given operation. If first operation, set start as
|
||||
`planned_start_date`, else add time diff to end time of earlier operation."""
|
||||
|
||||
@ -449,9 +467,14 @@ class ProductionOrder(Document):
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_item_details(item, project = None):
|
||||
res = frappe.db.sql("""select stock_uom, description
|
||||
from `tabItem` where disabled=0 and (end_of_life is null or end_of_life='0000-00-00' or end_of_life > %s)
|
||||
and name=%s""", (nowdate(), item), as_dict=1)
|
||||
res = frappe.db.sql("""
|
||||
select stock_uom, description
|
||||
from `tabItem`
|
||||
where disabled=0
|
||||
and (end_of_life is null or end_of_life='0000-00-00' or end_of_life > %s)
|
||||
and name=%s
|
||||
""", (nowdate(), item), as_dict=1)
|
||||
|
||||
if not res:
|
||||
return {}
|
||||
|
||||
|
||||
@ -285,8 +285,10 @@ def make_prod_order_test_record(**args):
|
||||
pro_order.scrap_warehouse = args.fg_warehouse or "_Test Scrap Warehouse - _TC"
|
||||
pro_order.company = args.company or "_Test Company"
|
||||
pro_order.stock_uom = args.stock_uom or "_Test UOM"
|
||||
pro_order.use_multi_level_bom=0
|
||||
pro_order.set_production_order_operations()
|
||||
|
||||
|
||||
if args.source_warehouse:
|
||||
pro_order.source_warehouse = args.source_warehouse
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"beta": 0,
|
||||
@ -9,18 +10,22 @@
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "details",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -29,6 +34,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -39,13 +45,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "operation",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Operation",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -57,6 +66,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
@ -67,13 +77,46 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "bom",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "BOM",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
"options": "BOM",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Text Editor",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Operation Description",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -84,6 +127,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -94,13 +138,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "col_break1",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -108,6 +155,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -118,6 +166,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "Operation completed for how many finished goods?",
|
||||
"fieldname": "completed_qty",
|
||||
"fieldtype": "Float",
|
||||
@ -125,7 +174,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Completed Qty",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@ -134,6 +185,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -144,6 +196,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "Pending",
|
||||
"fieldname": "status",
|
||||
"fieldtype": "Select",
|
||||
@ -151,7 +204,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Status",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@ -161,6 +216,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -171,13 +227,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "workstation",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Workstation",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -189,6 +248,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -199,13 +259,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "estimated_time_and_cost",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Estimated Time and Cost",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -214,6 +277,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -224,13 +288,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "planned_start_time",
|
||||
"fieldtype": "Datetime",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Planned Start Time",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@ -239,6 +306,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -249,13 +317,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "planned_end_time",
|
||||
"fieldtype": "Datetime",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Planned End Time",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@ -264,6 +335,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -274,13 +346,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "column_break_10",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -288,6 +363,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -298,6 +374,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "in Minutes",
|
||||
"fieldname": "time_in_mins",
|
||||
"fieldtype": "Float",
|
||||
@ -305,7 +382,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Operation Time",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -316,6 +395,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
@ -326,13 +406,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "hour_rate",
|
||||
"fieldtype": "Float",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Hour Rate",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -343,6 +426,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -353,13 +437,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "planned_operating_cost",
|
||||
"fieldtype": "Currency",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Planned Operating Cost",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -369,6 +456,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -379,13 +467,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "section_break_9",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Actual Time and Cost",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -394,6 +485,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -404,13 +496,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "actual_start_time",
|
||||
"fieldtype": "Datetime",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Actual Start Time",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@ -419,6 +514,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -429,6 +525,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "Updated via 'Time Log'",
|
||||
"fieldname": "actual_end_time",
|
||||
"fieldtype": "Datetime",
|
||||
@ -436,7 +533,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Actual End Time",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@ -445,6 +544,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -455,13 +555,16 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "column_break_11",
|
||||
"fieldtype": "Column Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -469,6 +572,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -479,6 +583,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "in Minutes\nUpdated via 'Time Log'",
|
||||
"fieldname": "actual_operation_time",
|
||||
"fieldtype": "Float",
|
||||
@ -486,7 +591,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Actual Operation Time",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@ -495,6 +602,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -505,6 +613,7 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"description": "(Hour Rate / 60) * Actual Operation Time",
|
||||
"fieldname": "actual_operating_cost",
|
||||
"fieldtype": "Currency",
|
||||
@ -512,7 +621,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Actual Operating Cost",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@ -522,6 +633,7 @@
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
@ -529,17 +641,17 @@
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-08-22 03:41:42.356833",
|
||||
"modified": "2017-03-27 15:56:29.010336",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Manufacturing",
|
||||
"name": "Production Order Operation",
|
||||
@ -549,7 +661,9 @@
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
}
|
||||
@ -379,3 +379,5 @@ erpnext.patches.v7_2.update_attendance_docstatus
|
||||
erpnext.patches.v7_2.move_dates_from_salary_structure_to_employee
|
||||
erpnext.patches.v7_2.make_all_assessment_group
|
||||
erpnext.patches.v7_2.stock_uom_in_selling
|
||||
|
||||
erpnext.patches.v8_0.manufacturer_childtable_migrate
|
||||
|
||||
0
erpnext/patches/v8_0/__init__.py
Normal file
0
erpnext/patches/v8_0/__init__.py
Normal file
25
erpnext/patches/v8_0/manufacturer_childtable_migrate.py
Normal file
25
erpnext/patches/v8_0/manufacturer_childtable_migrate.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Copyright (c) 2017, Frappe and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
|
||||
# reading from json and writing it to mariadb
|
||||
# reload_doc needed here with information because new table introduced
|
||||
frappe.reload_doc('stock', 'doctype', 'item_manufacturer')
|
||||
# reload_doctype is a simpler concept of reload_doc
|
||||
frappe.reload_doctype('Item')
|
||||
|
||||
item_manufacturers = frappe.get_all("Item", fields=["name", "manufacturer", "manufacturer_part_no"])
|
||||
for item in item_manufacturers:
|
||||
if item.manufacturer or item.manufacturer_part_no:
|
||||
item_doc = frappe.get_doc("Item", item.name)
|
||||
item_doc.append("manufacturers", {
|
||||
"manufacturer": item.manufacturer,
|
||||
"manufacturer_part_no": item.manufacturer_part_no
|
||||
})
|
||||
item_doc.flags.ignore_validate = True
|
||||
item_doc.flags.ignore_mandatory = True
|
||||
item_doc.save()
|
||||
@ -1080,5 +1080,4 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
|
||||
|
||||
return method
|
||||
},
|
||||
|
||||
});
|
||||
@ -1,4 +1,4 @@
|
||||
<div class="pos-list-row pos-bill-item" data-item-code="{{ item_code }}">
|
||||
<div class="pos-list-row pos-bill-item {{ selected_class }}" data-item-code="{{ item_code }}">
|
||||
<div class="cell subject">
|
||||
<!--<input class="list-row-checkbox" type="checkbox" data-name="{{item_code}}">-->
|
||||
<a class="grey list-id" title="{{ item_name }}">{{ strip_html(__(item_name)) || item_code }}</a>
|
||||
|
||||
@ -1,22 +1,22 @@
|
||||
<div class="pos-selected-item-action" data-item-code="{%= item_code %}">
|
||||
<div class="pos-list-row">
|
||||
<div class="cell">Quantity:</div>
|
||||
<input class="form-control cell pos-item-qty" value="{%= qty %}"/>
|
||||
<input type="tel" class="form-control cell pos-item-qty" value="{%= qty %}"/>
|
||||
</div>
|
||||
<div class="pos-list-row">
|
||||
<div class="cell">Price List Rate:</div>
|
||||
<input class="form-control cell" disabled value="{%= price_list_rate %}"/>
|
||||
<input type="tel" class="form-control cell" disabled value="{%= price_list_rate %}"/>
|
||||
</div>
|
||||
<div class="pos-list-row">
|
||||
<div class="cell">Discount:</div>
|
||||
<input class="form-control cell pos-item-disc" value="{%= discount_percentage %}">
|
||||
<input type="tel" class="form-control cell pos-item-disc" value="{%= discount_percentage %}">
|
||||
</div>
|
||||
<div class="pos-list-row">
|
||||
<div class="cell">Price:</div>
|
||||
<input class="form-control cell pos-item-price" value="{%= rate %}"/>
|
||||
<input type="tel" class="form-control cell pos-item-price" value="{%= rate %}"/>
|
||||
</div>
|
||||
<div class="pos-list-row">
|
||||
<div class="cell">Amount:</div>
|
||||
<input class="form-control cell pos-amount" value="{%= amount %}"/>
|
||||
<input type="tel" class="form-control cell pos-amount" value="{%= amount %}"/>
|
||||
</div>
|
||||
</div>
|
||||
@ -241,7 +241,7 @@ data_map = {
|
||||
}
|
||||
},
|
||||
"Purchase Invoice Item": {
|
||||
"columns": ["name", "parent", "item_code", "stock_qty as qty", "base_net_amount"],
|
||||
"columns": ["name", "parent", "item_code", "(qty * conversion_factor) as qty", "base_net_amount"],
|
||||
"conditions": ["docstatus=1", "ifnull(parent, '')!=''"],
|
||||
"order_by": "parent",
|
||||
"links": {
|
||||
|
||||
@ -1528,6 +1528,65 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 1,
|
||||
"columns": 0,
|
||||
"fieldname": "manufacturer_part_numbers",
|
||||
"fieldtype": "Section Break",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Manufacturer Part Numbers",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "manufacturers",
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Item Manufacturers",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Item Manufacturer",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@ -1617,65 +1676,6 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "",
|
||||
"fieldname": "manufacturer",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Manufacturer",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Manufacturer",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"depends_on": "",
|
||||
"fieldname": "manufacturer_part_no",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Manufacturer Part Number",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@ -2955,7 +2955,7 @@
|
||||
"istable": 0,
|
||||
"max_attachments": 1,
|
||||
"modified": "2017-03-24 15:46:18.569291",
|
||||
"modified_by": "Administrator",
|
||||
"modified_by": "d.ottenbreit@eso-electronic.de",
|
||||
"module": "Stock",
|
||||
"name": "Item",
|
||||
"owner": "Administrator",
|
||||
|
||||
@ -217,15 +217,15 @@ class TestItem(unittest.TestCase):
|
||||
variant = get_variant(template.name, manufacturer=manufacturer.name)
|
||||
self.assertEquals(variant.item_code, '_Test Variant Mfg-1')
|
||||
self.assertEquals(variant.description, '_Test Variant Mfg')
|
||||
self.assertEquals(variant.manufacturer, 'MSG1')
|
||||
self.assertEquals(variant.get("manufacturers")[0].manufacturer, 'MSG1')
|
||||
variant.insert()
|
||||
|
||||
variant = get_variant(template.name, manufacturer=manufacturer.name,
|
||||
manufacturer_part_no='007')
|
||||
self.assertEquals(variant.item_code, '_Test Variant Mfg-2')
|
||||
self.assertEquals(variant.description, '_Test Variant Mfg')
|
||||
self.assertEquals(variant.manufacturer, 'MSG1')
|
||||
self.assertEquals(variant.manufacturer_part_no, '007')
|
||||
self.assertEquals(variant.get("manufacturers")[0].manufacturer, 'MSG1')
|
||||
self.assertEquals(variant.get("manufacturers")[0].manufacturer_part_no, '007')
|
||||
|
||||
|
||||
def make_item_variant():
|
||||
|
||||
0
erpnext/stock/doctype/item_manufacturer/__init__.py
Normal file
0
erpnext/stock/doctype/item_manufacturer/__init__.py
Normal file
100
erpnext/stock/doctype/item_manufacturer/item_manufacturer.json
Normal file
100
erpnext/stock/doctype/item_manufacturer/item_manufacturer.json
Normal file
@ -0,0 +1,100 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"beta": 0,
|
||||
"creation": "2017-03-24 14:05:42.026237",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "manufacturer",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Manufacturer",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "Manufacturer",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "manufacturer_part_no",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Manufacturer Part Number",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2017-03-24 14:33:56.726460",
|
||||
"modified_by": "d.ottenbreit@eso-electronic.de",
|
||||
"module": "Stock",
|
||||
"name": "Item Manufacturer",
|
||||
"name_case": "",
|
||||
"owner": "d.ottenbreit@eso-electronic.de",
|
||||
"permissions": [],
|
||||
"quick_entry": 1,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0
|
||||
}
|
||||
10
erpnext/stock/doctype/item_manufacturer/item_manufacturer.py
Normal file
10
erpnext/stock/doctype/item_manufacturer/item_manufacturer.py
Normal file
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
class ItemManufacturer(Document):
|
||||
pass
|
||||
@ -518,7 +518,7 @@ apps/erpnext/erpnext/stock/dashboard/item_dashboard_list.html +25,Acutal Qty {0}
|
||||
DocType: Timesheet Detail,Hrs,Std
|
||||
apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +317,Please select Company,Bitte Firma auswählen
|
||||
DocType: Stock Entry Detail,Difference Account,Differenzkonto
|
||||
apps/erpnext/erpnext/projects/doctype/task/task.py +46,Cannot close task as its dependant task {0} is not closed.,"Aufgabe kann nicht geschlossen werden, da die von ihr abhängige Aufgabe {0} nicht geschlossen ist."
|
||||
apps/erpnext/erpnext/projects/doctype/task/task.py +46,Cannot close task as its dependant task {0} is not closed.,"Aufgabe kann nicht abgeschlossen werden, da die von ihr abhängige Aufgabe {0} nicht abgeschlossen ist."
|
||||
apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +433,Please enter Warehouse for which Material Request will be raised,"Bitte das Lager eingeben, für das eine Materialanfrage erhoben wird"
|
||||
DocType: Production Order,Additional Operating Cost,Zusätzliche Betriebskosten
|
||||
apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +20,Cosmetics,Kosmetika
|
||||
@ -1430,7 +1430,7 @@ DocType: Rename Tool,Type of document to rename.,"Dokumententyp, der umbenannt w
|
||||
apps/erpnext/erpnext/public/js/setup_wizard.js +307,We buy this Item,Wir kaufen diesen Artikel
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +54,{0} {1}: Customer is required against Receivable account {2},{0} {1}: Der Kunde muss gegen Receivable Konto {2}
|
||||
DocType: Purchase Invoice,Total Taxes and Charges (Company Currency),Gesamte Steuern und Gebühren (Firmenwährung)
|
||||
apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.js +60,Show unclosed fiscal year's P&L balances,Zeigen Sie nicht geschlossene Geschäftsjahr des P & L-Waagen
|
||||
apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.js +60,Show unclosed fiscal year's P&L balances,Zeigen Sie nicht abgeschlossene Geschäftsjahr des P & L-Waagen
|
||||
DocType: Shipping Rule,Shipping Account,Versandkonto
|
||||
apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +93,{0} {1}: Account {2} is inactive,{0} {1}: Konto {2} ist inaktiv
|
||||
apps/erpnext/erpnext/utilities/activation.py +85,Make Sales Orders to help you plan your work and deliver on-time,Machen Sie Kundenaufträge Sie Ihre Arbeit planen und liefern on-time
|
||||
@ -1468,7 +1468,7 @@ DocType: HR Settings,Email Salary Slip to Employee,E-Mail-Gehaltsabrechnung an M
|
||||
DocType: Cost Center,Parent Cost Center,Übergeordnete Kostenstelle
|
||||
apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +816,Select Possible Supplier,Wählen Mögliche Lieferant
|
||||
DocType: Sales Invoice,Source,Quelle
|
||||
apps/erpnext/erpnext/templates/pages/projects.html +31,Show closed,Zeige geschlossen
|
||||
apps/erpnext/erpnext/templates/pages/projects.html +31,Show closed,Zeige abgeschlossen
|
||||
DocType: Leave Type,Is Leave Without Pay,Ist unbezahlter Urlaub
|
||||
apps/erpnext/erpnext/stock/doctype/item/item.py +237,Asset Category is mandatory for Fixed Asset item,Anlagekategorie ist obligatorisch für Posten des Anlagevermögens
|
||||
apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +145,No records found in the Payment table,"Keine Datensätze in der Tabelle ""Zahlungen"" gefunden"
|
||||
@ -1578,7 +1578,7 @@ apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py
|
||||
apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +23,Payment Request already exists {0},Zahlungsanordnung bereits vorhanden ist {0}
|
||||
apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py +27,Cost of Issued Items,Aufwendungen für in Umlauf gebrachte Artikel
|
||||
apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.js +246,Quantity must not be more than {0},Menge darf nicht mehr als {0} sein
|
||||
apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +107,Previous Financial Year is not closed,Zurück Geschäftsjahr nicht geschlossen
|
||||
apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +107,Previous Financial Year is not closed,Zurück Geschäftsjahr nicht abgeschlossen
|
||||
apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +44,Age (Days),Alter (Tage)
|
||||
DocType: Quotation Item,Quotation Item,Angebotsposition
|
||||
DocType: Account,Account Name,Kontenname
|
||||
@ -2282,7 +2282,7 @@ DocType: Supplier Quotation,Opportunity,Chance
|
||||
DocType: Operation,Default Workstation,Standard-Arbeitsplatz
|
||||
DocType: Notification Control,Expense Claim Approved Message,Benachrichtigung über genehmigte Aufwandsabrechnung
|
||||
DocType: Payment Entry,Deductions or Loss,Abzüge oder Verlust
|
||||
apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +240,{0} {1} is closed,{0} {1} ist geschlossen
|
||||
apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +240,{0} {1} is closed,{0} {1} ist abgeschlossen
|
||||
DocType: Email Digest,How frequently?,Wie häufig?
|
||||
DocType: Purchase Receipt,Get Current Stock,Aktuellen Lagerbestand aufrufen
|
||||
apps/erpnext/erpnext/config/manufacturing.py +46,Tree of Bill of Materials,Stücklistenstruktur
|
||||
@ -2583,6 +2583,7 @@ DocType: Bin,FCFS Rate,"""Wer-zuerst-kommt-mahlt-zuerst""-Anteil (Windhundverfah
|
||||
DocType: Payment Reconciliation Invoice,Outstanding Amount,Ausstehender Betrag
|
||||
apps/erpnext/erpnext/templates/generators/bom.html +71,Time(in mins),Zeit (in Min)
|
||||
DocType: Project Task,Working,In Bearbeitung
|
||||
DocType: Project Task,Closed,Abgeschlossen
|
||||
DocType: Stock Ledger Entry,Stock Queue (FIFO),Lagerverfahren (FIFO)
|
||||
apps/erpnext/erpnext/accounts/doctype/pos_profile/pos_profile.py +39,{0} does not belong to Company {1},{0} gehört nicht zu Firma {1}
|
||||
apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +119,Cost as on,"Kosten, da auf"
|
||||
@ -2805,7 +2806,7 @@ apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +79,Party T
|
||||
DocType: Quality Inspection,Outgoing,Ausgang
|
||||
DocType: Material Request,Requested For,Angefordert für
|
||||
DocType: Quotation Item,Against Doctype,Zu DocType
|
||||
apps/erpnext/erpnext/controllers/buying_controller.py +380,{0} {1} is cancelled or closed,{0} {1} wurde abgebrochen oder geschlossen
|
||||
apps/erpnext/erpnext/controllers/buying_controller.py +380,{0} {1} is cancelled or closed,{0} {1} wurde abgebrochen oder abgeschlossen
|
||||
DocType: Delivery Note,Track this Delivery Note against any Project,Diesen Lieferschein in jedem Projekt nachverfolgen
|
||||
apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +30,Net Cash from Investing,Nettocashflow aus Investitionen
|
||||
,Is Primary Address,Ist Hauptadresse
|
||||
@ -2838,7 +2839,7 @@ apps/erpnext/erpnext/accounts/doctype/asset/asset.py +58,Expected Value After Us
|
||||
DocType: Sales Invoice Item,Available Qty at Warehouse,Verfügbarer Lagerbestand
|
||||
apps/erpnext/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py +20,Billed Amount,Rechnungsbetrag
|
||||
DocType: Asset,Double Declining Balance,Doppelte degressive
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +166,Closed order cannot be cancelled. Unclose to cancel.,Geschlossen Auftrag nicht abgebrochen werden kann. Unclose abzubrechen.
|
||||
apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +166,Closed order cannot be cancelled. Unclose to cancel.,Abgeschlossen Auftrag kann nicht abgebrochen werden. Abschließen rückgängig machen um abzubrechen.
|
||||
DocType: Student Guardian,Father,Vater
|
||||
apps/erpnext/erpnext/controllers/accounts_controller.py +568,'Update Stock' cannot be checked for fixed asset sale,'Update Bestand' kann nicht für einen festen Asset-Verkauf überprüft werden
|
||||
DocType: Bank Reconciliation,Bank Reconciliation,Kontenabgleich
|
||||
@ -3724,7 +3725,7 @@ DocType: Purchase Invoice,Return,Zurück
|
||||
DocType: Production Order Operation,Production Order Operation,Arbeitsgang im Fertigungsauftrag
|
||||
DocType: Pricing Rule,Disable,Deaktivieren
|
||||
apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +153,Mode of payment is required to make a payment,"Modus der Zahlung ist erforderlich, um eine Zahlung zu leisten"
|
||||
DocType: Project Task,Pending Review,Wartet auf Überprüfung
|
||||
DocType: Project Task,Pending Review,Warte auf Überprüfung
|
||||
apps/erpnext/erpnext/accounts/doctype/asset/depreciation.py +106,"Asset {0} cannot be scrapped, as it is already {1}","Asset-{0} kann nicht verschrottet werden, als es ohnehin schon ist {1}"
|
||||
DocType: Task,Total Expense Claim (via Expense Claim),Gesamtbetrag der Aufwandsabrechnung (über Aufwandsabrechnung)
|
||||
apps/erpnext/erpnext/accounts/report/sales_register/sales_register.py +70,Customer Id,Kunden-ID
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user