Merge branch 'develop' into customs_tariff_number

This commit is contained in:
Nabin Hait 2017-03-28 13:51:44 +05:30 committed by GitHub
commit 6c3eb36c35
28 changed files with 491 additions and 162 deletions

View File

@ -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.

View File

@ -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'''

View File

@ -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"):

View File

@ -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) {

View File

@ -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()

View File

@ -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')

View File

@ -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() {

View File

@ -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;
}
}
})
},

View File

@ -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]

View File

@ -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 }

View File

@ -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)

View File

@ -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')
},

View File

@ -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 {}

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

View 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()

View File

@ -1080,5 +1080,4 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
return method
},
});

View File

@ -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>

View File

@ -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>

View File

@ -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": {

View File

@ -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",

View File

@ -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():

View 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
}

View 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

View File

@ -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 &amp; 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 &amp; 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

1 DocType: Employee Salary Mode Gehaltsmodus
518 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. Aufgabe kann nicht abgeschlossen werden, da die von ihr abhängige Aufgabe {0} nicht abgeschlossen ist.
519 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
520 DocType: Production Order Additional Operating Cost Zusätzliche Betriebskosten
521 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +20 Cosmetics Kosmetika
522 apps/erpnext/erpnext/stock/doctype/item/item.py +535 To merge, following properties must be same for both items Um zwei Produkte zusammenzuführen, müssen folgende Eigenschaften für beide Produkte gleich sein
523 DocType: Shipping Rule Net Weight Nettogewicht
524 DocType: Employee Emergency Phone Notruf
1430 apps/erpnext/erpnext/schools/utils.py +19 This {0} conflicts with {1} for {2} {3} Diese {0} Konflikte mit {1} von {2} {3}
1431 DocType: Student Attendance Tool Students HTML Studenten HTML
1432 apps/erpnext/erpnext/public/js/setup_wizard.js +60 Financial Year Start Date Startdatum des Geschäftsjahres
1433 DocType: POS Profile Apply Discount bewerben Rabatt
1434 DocType: Employee External Work History Total Experience Gesamterfahrung
1435 apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +70 Open Projects Offene Projekte
1436 apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +265 Packing Slip(s) cancelled Packzettel storniert
1468 DocType: Expense Claim EXP EXP
1469 apps/erpnext/erpnext/config/stock.py +200 Brand master. Stammdaten zur Marke
1470 apps/erpnext/erpnext/schools/utils.py +50 Student {0} - {1} appears Multiple times in row {2} & {3} Student {0} - {1} erscheint mehrfach in Zeile {2} &amp; {3}
1471 DocType: Program Enrollment Tool Program Enrollments Programm Einschreibungen
1472 DocType: Sales Invoice Item Brand Name Bezeichnung der Marke
1473 DocType: Purchase Receipt Transporter Details Informationen zum Transporteur
1474 apps/erpnext/erpnext/accounts/page/pos/pos.js +2058 Default warehouse is required for selected item Standard Lager wird für das ausgewählte Element erforderlich
1578 apps/erpnext/erpnext/schools/doctype/student_group/student_group.py +40 Cannot enroll more than {0} students for this student group. Kann nicht mehr als {0} Studenten für diese Studentengruppe einschreiben.
1579 apps/erpnext/erpnext/accounts/doctype/asset_category/asset_category.py +15 {0} must be greater than 0 {0} muss größer 0 sein
1580 DocType: Manufacturing Settings Capacity Planning For (Days) Kapazitätsplanung für (Tage)
1581 apps/erpnext/erpnext/buying/doctype/supplier/supplier_dashboard.py +10 Procurement Beschaffung
1582 apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +64 None of the items have any change in quantity or value. Keiner der Artikel hat irgendeine Änderung bei Mengen oder Kosten.
1583 apps/erpnext/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js +43 Warranty Claim Garantieanspruch
1584 Lead Details Einzelheiten zum Lead
2282 apps/erpnext/erpnext/crm/doctype/lead/lead.py +45 Next Contact By cannot be same as the Lead Email Address Weiter Kontakt Durch nicht als Lead E-Mail-Adresse identisch sein
2283 DocType: Tax Rule Billing City Stadt laut Rechnungsadresse
2284 DocType: Asset Manual Handbuch
2285 DocType: Salary Component Account Salary Component Account Gehaltskomponente Account
2286 DocType: Global Defaults Hide Currency Symbol Währungssymbol ausblenden
2287 apps/erpnext/erpnext/config/accounts.py +289 e.g. Bank, Cash, Credit Card z. B. Bank, Bargeld, Kreditkarte
2288 DocType: Lead Source Source Name Quellenname
2583 apps/erpnext/erpnext/hr/doctype/job_applicant/job_applicant.py +25 DocType: Program Enrollment Tool Student Name or Email is mandatory Program Enrollment Tool Student Name oder E-Mail-Adresse ist zwingend erforderlich Programm-Enrollment-Tool Studenten
2584 apps/erpnext/erpnext/config/stock.py +163 apps/erpnext/erpnext/hr/doctype/job_applicant/job_applicant.py +25 Incoming quality inspection. Name or Email is mandatory Wareneingangs-Qualitätsprüfung Name oder E-Mail-Adresse ist zwingend erforderlich
2585 DocType: Purchase Order Item apps/erpnext/erpnext/config/stock.py +163 Returned Qty Incoming quality inspection. Zurückgegebene Menge Wareneingangs-Qualitätsprüfung
2586 DocType: Purchase Order Item Returned Qty Zurückgegebene Menge
2587 DocType: Employee Exit Verlassen
2588 apps/erpnext/erpnext/accounts/doctype/account/account.py +160 Root Type is mandatory Root-Typ ist zwingend erforderlich
2589 DocType: BOM Total Cost(Company Currency) Gesamtkosten (Gesellschaft Währung)
2806 DocType: Production Order Material Transferred for Manufacturing Material zur Herstellung übertragen
2807 apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +32 Account {0} does not exists Konto {0} existiert nicht
2808 DocType: Project Project Type Projekttyp
2809 apps/erpnext/erpnext/setup/doctype/sales_person/sales_person.py +16 Either target qty or target amount is mandatory. Entweder Zielstückzahl oder Zielmenge ist zwingend erforderlich.
2810 apps/erpnext/erpnext/config/projects.py +45 Cost of various activities Aufwendungen für verschiedene Tätigkeiten
2811 apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +60 Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1} Einstellen Events auf {0}, da die Mitarbeiter auf die beigefügten unter Verkaufs Personen keine Benutzer-ID {1}
2812 DocType: Timesheet Billing Details Rechnungsdetails
2839 apps/erpnext/erpnext/selling/page/sales_analytics/sales_analytics.js +33 Customer Group / Customer Kundengruppe / Kunde
2840 apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +28 Unclosed Fiscal Years Profit / Loss (Credit) Unclosed Geschäftsjahre Gewinn / Verlust (Credit)
2841 DocType: Sales Invoice Time Sheets Zeitblätter
2842 DocType: Payment Gateway Account Default Payment Request Message Standard Payment Request Message
2843 DocType: Item Group Check this if you want to show in website Aktivieren, wenn der Inhalt auf der Webseite angezeigt werden soll
2844 apps/erpnext/erpnext/config/accounts.py +136 Banking and Payments Bank- und Zahlungsverkehr
2845 Welcome to ERPNext Willkommen bei ERPNext
3725 DocType: Employee Education Qualification Qualifikation
3726 DocType: Item Price Item Price Artikelpreis
3727 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +48 Soap & Detergent Reinigungsmittel
3728 DocType: BOM Show Items Elemente anzeigen
3729 apps/erpnext/erpnext/schools/doctype/course_schedule/course_schedule.py +39 From Time cannot be greater than To Time. Von Zeit sein kann, nicht größer ist als auf die Zeit.
3730 apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +36 Motion Picture & Video Film & Fernsehen
3731 apps/erpnext/erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js +5 Ordered Bestellt