mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-01 20:48:27 +00:00
chore: resolved conflicts
This commit is contained in:
@@ -18,4 +18,4 @@ max_line_length = 110
|
||||
[{*.json}]
|
||||
insert_final_newline = false
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
indent_size = 1
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -14,5 +14,6 @@ __pycache__
|
||||
*~
|
||||
.idea/
|
||||
.vscode/
|
||||
.helix/
|
||||
node_modules/
|
||||
.backportrc.json
|
||||
.backportrc.json
|
||||
|
||||
@@ -2,6 +2,7 @@ import functools
|
||||
import inspect
|
||||
|
||||
import frappe
|
||||
from frappe.utils.user import is_website_user
|
||||
|
||||
__version__ = "16.0.0-dev"
|
||||
|
||||
@@ -149,3 +150,13 @@ def allow_regional(fn):
|
||||
return frappe.get_attr(overrides[function_path][-1])(*args, **kwargs)
|
||||
|
||||
return caller
|
||||
|
||||
|
||||
def check_app_permission():
|
||||
if frappe.session.user == "Administrator":
|
||||
return True
|
||||
|
||||
if is_website_user():
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
@@ -38,6 +38,11 @@ frappe.ui.form.on("Bank Clearance", {
|
||||
frm.add_custom_button(__("Get Payment Entries"), () => frm.trigger("get_payment_entries"));
|
||||
|
||||
frm.change_custom_button_type(__("Get Payment Entries"), null, "primary");
|
||||
if (frm.doc.payment_entries.length) {
|
||||
frm.add_custom_button(__("Update Clearance Date"), () => frm.trigger("update_clearance_date"));
|
||||
frm.change_custom_button_type(__("Get Payment Entries"), null, "default");
|
||||
frm.change_custom_button_type(__("Update Clearance Date"), null, "primary");
|
||||
}
|
||||
},
|
||||
|
||||
update_clearance_date: function (frm) {
|
||||
@@ -45,13 +50,7 @@ frappe.ui.form.on("Bank Clearance", {
|
||||
method: "update_clearance_date",
|
||||
doc: frm.doc,
|
||||
callback: function (r, rt) {
|
||||
frm.refresh_field("payment_entries");
|
||||
frm.refresh_fields();
|
||||
|
||||
if (!frm.doc.payment_entries.length) {
|
||||
frm.change_custom_button_type(__("Get Payment Entries"), null, "primary");
|
||||
frm.change_custom_button_type(__("Update Clearance Date"), null, "default");
|
||||
}
|
||||
frm.refresh();
|
||||
},
|
||||
});
|
||||
},
|
||||
@@ -60,17 +59,8 @@ frappe.ui.form.on("Bank Clearance", {
|
||||
return frappe.call({
|
||||
method: "get_payment_entries",
|
||||
doc: frm.doc,
|
||||
callback: function (r, rt) {
|
||||
frm.refresh_field("payment_entries");
|
||||
|
||||
if (frm.doc.payment_entries.length) {
|
||||
frm.add_custom_button(__("Update Clearance Date"), () =>
|
||||
frm.trigger("update_clearance_date")
|
||||
);
|
||||
|
||||
frm.change_custom_button_type(__("Get Payment Entries"), null, "default");
|
||||
frm.change_custom_button_type(__("Update Clearance Date"), null, "primary");
|
||||
}
|
||||
callback: function () {
|
||||
frm.refresh();
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@@ -305,7 +305,7 @@ frappe.ui.form.on("Payment Entry", {
|
||||
|
||||
set_dynamic_labels: function (frm) {
|
||||
var company_currency = frm.doc.company
|
||||
? frappe.get_doc(":Company", frm.doc.company).default_currency
|
||||
? frappe.get_doc(":Company", frm.doc.company)?.default_currency
|
||||
: "";
|
||||
|
||||
frm.set_currency_labels(
|
||||
|
||||
@@ -1838,7 +1838,7 @@ def get_outstanding_reference_documents(args, validate=False):
|
||||
d["bill_no"] = frappe.db.get_value(d.voucher_type, d.voucher_no, "bill_no")
|
||||
|
||||
# Get negative outstanding sales /purchase invoices
|
||||
if args.get("party_type") != "Employee" and not args.get("voucher_no"):
|
||||
if args.get("party_type") != "Employee":
|
||||
negative_outstanding_invoices = get_negative_outstanding_invoices(
|
||||
args.get("party_type"),
|
||||
args.get("party"),
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"failed_reason",
|
||||
"column_break_2",
|
||||
"naming_series",
|
||||
"company",
|
||||
"mode_of_payment",
|
||||
"party_details",
|
||||
"party_type",
|
||||
@@ -400,13 +401,20 @@
|
||||
"no_copy": 1,
|
||||
"print_hide": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "company",
|
||||
"fieldtype": "Link",
|
||||
"label": "Company",
|
||||
"options": "Company",
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"in_create": 1,
|
||||
"index_web_pages_for_search": 1,
|
||||
"is_submittable": 1,
|
||||
"links": [],
|
||||
"modified": "2024-06-20 13:54:55.245774",
|
||||
"modified": "2024-08-07 16:39:54.288002",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Accounts",
|
||||
"name": "Payment Request",
|
||||
|
||||
@@ -16,7 +16,7 @@ from erpnext.accounts.doctype.payment_entry.payment_entry import (
|
||||
)
|
||||
from erpnext.accounts.doctype.subscription_plan.subscription_plan import get_plan_rate
|
||||
from erpnext.accounts.party import get_party_account, get_party_bank_account
|
||||
from erpnext.accounts.utils import get_account_currency
|
||||
from erpnext.accounts.utils import get_account_currency, get_currency_precision
|
||||
from erpnext.utilities import payment_app_import_guard
|
||||
|
||||
|
||||
@@ -85,6 +85,7 @@ class PaymentRequest(Document):
|
||||
subscription_plans: DF.Table[SubscriptionPlanDetail]
|
||||
swift_number: DF.ReadOnly | None
|
||||
transaction_date: DF.Date | None
|
||||
company: DF.Link | None
|
||||
# end: auto-generated types
|
||||
|
||||
def validate(self):
|
||||
@@ -499,6 +500,7 @@ def make_payment_request(**args):
|
||||
"message": gateway_account.get("message") or get_dummy_message(ref_doc),
|
||||
"reference_doctype": args.dt,
|
||||
"reference_name": args.dn,
|
||||
"company": ref_doc.get("company"),
|
||||
"party_type": args.get("party_type") or "Customer",
|
||||
"party": args.get("party") or ref_doc.get("customer"),
|
||||
"bank_account": bank_account,
|
||||
@@ -566,7 +568,10 @@ def get_amount(ref_doc, payment_account=None):
|
||||
elif dt == "Fees":
|
||||
grand_total = ref_doc.outstanding_amount
|
||||
|
||||
return grand_total
|
||||
if grand_total > 0:
|
||||
return flt(grand_total, get_currency_precision())
|
||||
else:
|
||||
frappe.throw(_("Payment Entry is already created"))
|
||||
|
||||
|
||||
def get_existing_payment_request_amount(ref_dt, ref_dn):
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<h2 class="text-center">{{ _("STATEMENTS OF ACCOUNTS") }}</h2>
|
||||
<h2 class="text-center">{{ _("STATEMENT OF ACCOUNTS") }}</h2>
|
||||
<div>
|
||||
{% if filters.party[0] == filters.party_name[0] %}
|
||||
<h5 style="float: left;">{{ _("Customer: ") }} <b>{{ filters.party_name[0] }}</b></h5>
|
||||
@@ -22,11 +22,11 @@
|
||||
<h5 style="float: left; margin-left:15px">{{ _("Customer Name: ") }} <b>{{filters.party_name[0] }}</b></h5>
|
||||
{% endif %}
|
||||
<h5 style="float: right;">
|
||||
{{ _("Date: ") }}
|
||||
<b>{{ frappe.format(filters.from_date, 'Date')}}
|
||||
{{ _("to") }}
|
||||
{{ frappe.format(filters.to_date, 'Date')}}</b>
|
||||
</h5>
|
||||
{{ _("Date: {0} to {1}").format(
|
||||
frappe.format(filters.from_date, "Date"),
|
||||
frappe.format(filters.to_date, 'Date')
|
||||
) }}
|
||||
</h5>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<br>
|
||||
{% endif %}
|
||||
|
||||
<br>{{ _("Remarks") }}: {{ row.remarks }}
|
||||
<br>{{ _("Remarks:") }} {{ row.remarks }}
|
||||
{% if row.bill_no %}
|
||||
<br>{{ _("Supplier Invoice No") }}: {{ row.bill_no }}
|
||||
{% endif %}
|
||||
@@ -83,17 +83,20 @@
|
||||
</table>
|
||||
<br>
|
||||
{% if ageing %}
|
||||
<h4 class="text-center">{{ _("Ageing Report based on ") }} {{ ageing.ageing_based_on }}
|
||||
{{ _("up to " ) }} {{ frappe.format(filters.to_date, 'Date')}}
|
||||
<h4 class="text-center">
|
||||
{{ _("Ageing Report based on {0} up to {1}").format(
|
||||
ageing.ageing_based_on,
|
||||
frappe.format(filters.to_date, "Date")
|
||||
) }}
|
||||
</h4>
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 20%">0 - 30 Days</th>
|
||||
<th style="width: 20%">30 - 60 Days</th>
|
||||
<th style="width: 20%">60 - 90 Days</th>
|
||||
<th style="width: 20%">90 - 120 Days</th>
|
||||
<th style="width: 20%">Above 120 Days</th>
|
||||
<th style="width: 20%">{{ _("0 - 30 Days") }}</th>
|
||||
<th style="width: 20%">{{ _("30 - 60 Days") }}</th>
|
||||
<th style="width: 20%">{{ _("60 - 90 Days") }}</th>
|
||||
<th style="width: 20%">{{ _("90 - 120 Days") }}</th>
|
||||
<th style="width: 20%">{{ _("Above 120 Days") }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@@ -6,228 +6,302 @@
|
||||
.print-format td {
|
||||
vertical-align:middle !important;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
<div id="header-html" class="hidden-pdf">
|
||||
{% if letter_head.content %}
|
||||
<div class="letter-head text-center">{{ letter_head.content }}</div>
|
||||
<hr style="height:2px;border-width:0;color:black;background-color:black;">
|
||||
{% endif %}
|
||||
</div>
|
||||
<div id="footer-html" class="visible-pdf">
|
||||
{% if letter_head.footer %}
|
||||
<div class="letter-head-footer">
|
||||
<hr style="border-width:0;color:black;background-color:black;padding-bottom:2px;">
|
||||
{{ letter_head.footer }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<h2 class="text-center" style="margin-top:0">{{ _(report.report_name) }}</h2>
|
||||
<h4 class="text-center">
|
||||
{{ filters.customer_name }}
|
||||
</h4>
|
||||
<h6 class="text-center">
|
||||
{% if (filters.tax_id) %}
|
||||
{{ _("Tax Id: ") }}{{ filters.tax_id }}
|
||||
{% endif %}
|
||||
</h6>
|
||||
<h5 class="text-center">
|
||||
{{ _(filters.ageing_based_on) }}
|
||||
{{ _("Until") }}
|
||||
{{ frappe.format(filters.report_date, 'Date') }}
|
||||
</h5>
|
||||
|
||||
<div class="clearfix">
|
||||
<div class="pull-left">
|
||||
{% if(filters.payment_terms) %}
|
||||
<strong>{{ _("Payment Terms") }}:</strong> {{ filters.payment_terms }}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
{% if(filters.credit_limit) %}
|
||||
<strong>{{ _("Credit Limit") }}:</strong> {{ frappe.utils.fmt_money(filters.credit_limit) }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if(filters.show_future_payments) %}
|
||||
{% set balance_row = data.slice(-1).pop() %}
|
||||
{% for i in report.columns %}
|
||||
{% if i.fieldname == 'age' %}
|
||||
{% set elem = i %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% set start = report.columns.findIndex(elem) %}
|
||||
{% set range1 = report.columns[start].label %}
|
||||
{% set range2 = report.columns[start+1].label %}
|
||||
{% set range3 = report.columns[start+2].label %}
|
||||
{% set range4 = report.columns[start+3].label %}
|
||||
{% set range5 = report.columns[start+4].label %}
|
||||
{% set range6 = report.columns[start+5].label %}
|
||||
|
||||
{% if(balance_row) %}
|
||||
<table class="table table-bordered table-condensed">
|
||||
<caption class="text-right">(Amount in {{ data[0]["currency"] ~ "" }})</caption>
|
||||
<colgroup>
|
||||
<col style="width: 30mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ _(" ") }}</th>
|
||||
<th>{{ _(range1) }}</th>
|
||||
<th>{{ _(range2) }}</th>
|
||||
<th>{{ _(range3) }}</th>
|
||||
<th>{{ _(range4) }}</th>
|
||||
<th>{{ _(range5) }}</th>
|
||||
<th>{{ _(range6) }}</th>
|
||||
<th>{{ _("Total") }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ _("Total Outstanding") }}</td>
|
||||
<td class="text-right">
|
||||
{{ format_number(balance_row["age"], null, 2) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range1"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range2"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range3"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range4"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range5"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(flt(balance_row["outstanding"]), data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
</tr>
|
||||
<td>{{ _("Future Payments") }}</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(flt(balance_row[("future_amount")]), data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<tr class="cvs-footer">
|
||||
<th class="text-left">{{ _("Cheques Required") }}</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th class="text-right">
|
||||
{{ frappe.utils.fmt_money(flt(balance_row["outstanding"] - balance_row[("future_amount")]), data[data.length-1]["currency"]) }}</th>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
{% endif %}
|
||||
<div id="header-html" class="hidden-pdf">
|
||||
{% if letter_head.content %}
|
||||
<div class="letter-head text-center">{{ letter_head.content }}</div>
|
||||
<hr style="height:2px;border-width:0;color:black;background-color:black;">
|
||||
{% endif %}
|
||||
<table class="table table-bordered">
|
||||
</div>
|
||||
<div id="footer-html" class="visible-pdf">
|
||||
{% if letter_head.footer %}
|
||||
<div class="letter-head-footer">
|
||||
<hr style="border-width:0;color:black;background-color:black;padding-bottom:2px;">
|
||||
{{ letter_head.footer }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<h2 class="text-center" style="margin-top:0">{{ _(report.report_name) }}</h2>
|
||||
<h4 class="text-center">
|
||||
{{ filters.customer_name }}
|
||||
</h4>
|
||||
<h6 class="text-center">
|
||||
{% if (filters.tax_id) %}
|
||||
{{ _("Tax Id: {0}").format(filters.tax_id) }}
|
||||
{% endif %}
|
||||
</h6>
|
||||
<h5 class="text-center">
|
||||
{{ _("{0} until {1}").format(
|
||||
_(filters.ageing_based_on),
|
||||
frappe.format(filters.report_date, 'Date')
|
||||
) }}
|
||||
</h5>
|
||||
|
||||
<div class="clearfix">
|
||||
<div class="pull-left">
|
||||
{% if(filters.payment_terms) %}
|
||||
<strong>{{ _("Payment Terms:") }}</strong> {{ filters.payment_terms }}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
{% if(filters.credit_limit) %}
|
||||
<strong>{{ _("Credit Limit:") }}</strong> {{ frappe.utils.fmt_money(filters.credit_limit) }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if(filters.show_future_payments) %}
|
||||
{% set balance_row = data.slice(-1).pop() %}
|
||||
{% for i in report.columns %}
|
||||
{% if i.fieldname == 'age' %}
|
||||
{% set elem = i %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% set start = report.columns.findIndex(elem) %}
|
||||
{% set range1 = report.columns[start].label %}
|
||||
{% set range2 = report.columns[start+1].label %}
|
||||
{% set range3 = report.columns[start+2].label %}
|
||||
{% set range4 = report.columns[start+3].label %}
|
||||
{% set range5 = report.columns[start+4].label %}
|
||||
{% set range6 = report.columns[start+5].label %}
|
||||
|
||||
{% if(balance_row) %}
|
||||
<table class="table table-bordered table-condensed">
|
||||
<caption class="text-right">{{ _("Amount in {0}").format(data[0]["currency"] ~ "") }}</caption>
|
||||
<colgroup>
|
||||
<col style="width: 30mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
<col style="width: 18mm;">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
{% if(report.report_name == "Accounts Receivable" or report.report_name == "Accounts Payable") %}
|
||||
<th style="width: 10%">{{ _("Date") }}</th>
|
||||
<th style="width: 4%">{{ _("Age (Days)") }}</th>
|
||||
|
||||
{% if(report.report_name == "Accounts Receivable" and filters.show_sales_person) %}
|
||||
<th style="width: 14%">{{ _("Reference") }}</th>
|
||||
<th style="width: 10%">{{ _("Sales Person") }}</th>
|
||||
{% else %}
|
||||
<th style="width: 24%">{{ _("Reference") }}</th>
|
||||
{% endif %}
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<th style="width: 20%">
|
||||
{% if (filters.customer or filters.supplier or filters.customer_name) %}
|
||||
{{ _("Remarks") }}
|
||||
{% else %}
|
||||
{{ _("Party") }}
|
||||
{% endif %}
|
||||
</th>
|
||||
{% endif %}
|
||||
<th style="width: 10%; text-align: right">{{ _("Invoiced Amount") }}</th>
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<th style="width: 10%; text-align: right">{{ _("Paid Amount") }}</th>
|
||||
<th style="width: 10%; text-align: right">
|
||||
{% if report.report_name == "Accounts Receivable" %}
|
||||
{{ _('Credit Note') }}
|
||||
{% else %}
|
||||
{{ _('Debit Note') }}
|
||||
{% endif %}
|
||||
</th>
|
||||
{% endif %}
|
||||
<th style="width: 10%; text-align: right">{{ _("Outstanding Amount") }}</th>
|
||||
{% if(filters.show_future_payments) %}
|
||||
{% if(report.report_name == "Accounts Receivable") %}
|
||||
<th style="width: 12%">{{ _("Customer LPO No.") }}</th>
|
||||
{% endif %}
|
||||
<th style="width: 10%">{{ _("Future Payment Ref") }}</th>
|
||||
<th style="width: 10%">{{ _("Future Payment Amount") }}</th>
|
||||
<th style="width: 10%">{{ _("Remaining Balance") }}</th>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<th style="width: 40%">
|
||||
{% if (filters.customer or filters.supplier or filters.customer_name) %}
|
||||
{{ _("Remarks")}}
|
||||
{% else %}
|
||||
{{ _("Party") }}
|
||||
{% endif %}
|
||||
</th>
|
||||
<th style="width: 15%">{{ _("Total Invoiced Amount") }}</th>
|
||||
<th style="width: 15%">{{ _("Total Paid Amount") }}</th>
|
||||
<th style="width: 15%">
|
||||
{% if report.report_name == "Accounts Receivable Summary" %}
|
||||
{{ _('Credit Note Amount') }}
|
||||
{% else %}
|
||||
{{ _('Debit Note Amount') }}
|
||||
{% endif %}
|
||||
</th>
|
||||
<th style="width: 15%">{{ _("Total Outstanding Amount") }}</th>
|
||||
{% endif %}
|
||||
<th>{{ _(" ") }}</th>
|
||||
<th>{{ _(range1) }}</th>
|
||||
<th>{{ _(range2) }}</th>
|
||||
<th>{{ _(range3) }}</th>
|
||||
<th>{{ _(range4) }}</th>
|
||||
<th>{{ _(range5) }}</th>
|
||||
<th>{{ _(range6) }}</th>
|
||||
<th>{{ _("Total") }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for i in range(data|length) %}
|
||||
<tr>
|
||||
{% if(report.report_name == "Accounts Receivable" or report.report_name == "Accounts Payable") %}
|
||||
{% if(data[i]["party"]) %}
|
||||
<td>{{ (data[i]["posting_date"]) }}</td>
|
||||
<td style="text-align: right">{{ data[i]["age"] }}</td>
|
||||
<td>
|
||||
{% if not(filters.show_future_payments) %}
|
||||
{{ data[i]["voucher_type"] }}
|
||||
<br>
|
||||
{% endif %}
|
||||
{{ data[i]["voucher_no"] }}
|
||||
</td>
|
||||
<tr>
|
||||
<td>{{ _("Total Outstanding") }}</td>
|
||||
<td class="text-right">
|
||||
{{ format_number(balance_row["age"], null, 2) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range1"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range2"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range3"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range4"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(balance_row["range5"], data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(flt(balance_row["outstanding"]), data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
</tr>
|
||||
<td>{{ _("Future Payments") }}</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td class="text-right">
|
||||
{{ frappe.utils.fmt_money(flt(balance_row[("future_amount")]), data[data.length-1]["currency"]) }}
|
||||
</td>
|
||||
<tr class="cvs-footer">
|
||||
<th class="text-left">{{ _("Cheques Required") }}</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th class="text-right">
|
||||
{{ frappe.utils.fmt_money(flt(balance_row["outstanding"] - balance_row[("future_amount")]), data[data.length-1]["currency"]) }}</th>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
{% if(report.report_name == "Accounts Receivable" and filters.show_sales_person) %}
|
||||
<td>{{ data[i]["sales_person"] }}</td>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
{% if(report.report_name == "Accounts Receivable" or report.report_name == "Accounts Payable") %}
|
||||
<th style="width: 10%">{{ _("Date") }}</th>
|
||||
<th style="width: 4%">{{ _("Age (Days)") }}</th>
|
||||
|
||||
{% if(report.report_name == "Accounts Receivable" and filters.show_sales_person) %}
|
||||
<th style="width: 14%">{{ _("Reference") }}</th>
|
||||
<th style="width: 10%">{{ _("Sales Person") }}</th>
|
||||
{% else %}
|
||||
<th style="width: 24%">{{ _("Reference") }}</th>
|
||||
{% endif %}
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<th style="width: 20%">
|
||||
{% if (filters.customer or filters.supplier or filters.customer_name) %}
|
||||
{{ _("Remarks") }}
|
||||
{% else %}
|
||||
{{ _("Party") }}
|
||||
{% endif %}
|
||||
</th>
|
||||
{% endif %}
|
||||
<th style="width: 10%; text-align: right">{{ _("Invoiced Amount") }}</th>
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<th style="width: 10%; text-align: right">{{ _("Paid Amount") }}</th>
|
||||
<th style="width: 10%; text-align: right">
|
||||
{% if report.report_name == "Accounts Receivable" %}
|
||||
{{ _("Credit Note") }}
|
||||
{% else %}
|
||||
{{ _("Debit Note") }}
|
||||
{% endif %}
|
||||
</th>
|
||||
{% endif %}
|
||||
<th style="width: 10%; text-align: right">{{ _("Outstanding Amount") }}</th>
|
||||
{% if(filters.show_future_payments) %}
|
||||
{% if(report.report_name == "Accounts Receivable") %}
|
||||
<th style="width: 12%">{{ _("Customer LPO No.") }}</th>
|
||||
{% endif %}
|
||||
<th style="width: 10%">{{ _("Future Payment Ref") }}</th>
|
||||
<th style="width: 10%">{{ _("Future Payment Amount") }}</th>
|
||||
<th style="width: 10%">{{ _("Remaining Balance") }}</th>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<th style="width: 40%">
|
||||
{% if (filters.customer or filters.supplier or filters.customer_name) %}
|
||||
{{ _("Remarks")}}
|
||||
{% else %}
|
||||
{{ _("Party") }}
|
||||
{% endif %}
|
||||
</th>
|
||||
<th style="width: 15%">{{ _("Total Invoiced Amount") }}</th>
|
||||
<th style="width: 15%">{{ _("Total Paid Amount") }}</th>
|
||||
<th style="width: 15%">
|
||||
{% if report.report_name == "Accounts Receivable Summary" %}
|
||||
{{ _("Credit Note Amount") }}
|
||||
{% else %}
|
||||
{{ _("Debit Note Amount") }}
|
||||
{% endif %}
|
||||
</th>
|
||||
<th style="width: 15%">{{ _("Total Outstanding Amount") }}</th>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for i in range(data|length) %}
|
||||
<tr>
|
||||
{% if(report.report_name == "Accounts Receivable" or report.report_name == "Accounts Payable") %}
|
||||
{% if(data[i]["party"]) %}
|
||||
<td>{{ (data[i]["posting_date"]) }}</td>
|
||||
<td style="text-align: right">{{ data[i]["age"] }}</td>
|
||||
<td>
|
||||
{% if not(filters.show_future_payments) %}
|
||||
{{ data[i]["voucher_type"] }}
|
||||
<br>
|
||||
{% endif %}
|
||||
{{ data[i]["voucher_no"] }}
|
||||
</td>
|
||||
|
||||
{% if not (filters.show_future_payments) %}
|
||||
{% if(report.report_name == "Accounts Receivable" and filters.show_sales_person) %}
|
||||
<td>{{ data[i]["sales_person"] }}</td>
|
||||
{% endif %}
|
||||
|
||||
{% if not (filters.show_future_payments) %}
|
||||
<td>
|
||||
{% if(not(filters.customer or filters.supplier or filters.customer_name)) %}
|
||||
{{ data[i]["party"] }}
|
||||
{% if(data[i]["customer_name"] and data[i]["customer_name"] != data[i]["party"]) %}
|
||||
<br> {{ data[i]["customer_name"] }}
|
||||
{% elif(data[i]["supplier_name"] != data[i]["party"]) %}
|
||||
<br> {{ data[i]["supplier_name"] }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<div>
|
||||
{% if data[i]["remarks"] %}
|
||||
{{ _("Remarks") }}:
|
||||
{{ data[i]["remarks"] }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</td>
|
||||
{% endif %}
|
||||
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["invoiced"], currency=data[i]["currency"]) }}</td>
|
||||
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["paid"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["credit_note"], currency=data[i]["currency"]) }}</td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["outstanding"], currency=data[i]["currency"]) }}</td>
|
||||
|
||||
{% if(filters.show_future_payments) %}
|
||||
{% if(report.report_name == "Accounts Receivable") %}
|
||||
<td style="text-align: right">
|
||||
{{ data[i]["po_no"] }}</td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">{{ data[i]["future_ref"] }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["future_amount"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["remaining_balance"], currency=data[i]["currency"]) }}</td>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<td></td>
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<td></td>
|
||||
{% endif %}
|
||||
{% if(report.report_name == "Accounts Receivable" and filters.show_sales_person) %}
|
||||
<td></td>
|
||||
{% endif %}
|
||||
<td></td>
|
||||
<td style="text-align: right"><b>{{ _("Total") }}</b></td>
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["invoiced"], data[i]["currency"]) }}</td>
|
||||
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["paid"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["credit_note"], currency=data[i]["currency"]) }} </td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["outstanding"], currency=data[i]["currency"]) }}</td>
|
||||
|
||||
{% if(filters.show_future_payments) %}
|
||||
{% if(report.report_name == "Accounts Receivable") %}
|
||||
<td style="text-align: right">
|
||||
{{ data[i]["po_no"] }}</td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">{{ data[i]["future_ref"] }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["future_amount"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["remaining_balance"], currency=data[i]["currency"]) }}</td>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if(data[i]["party"] or " ") %}
|
||||
{% if not(data[i]["is_total_row"]) %}
|
||||
<td>
|
||||
{% if(not(filters.customer or filters.supplier or filters.customer_name)) %}
|
||||
{% if(not(filters.customer | filters.supplier)) %}
|
||||
{{ data[i]["party"] }}
|
||||
{% if(data[i]["customer_name"] and data[i]["customer_name"] != data[i]["party"]) %}
|
||||
<br> {{ data[i]["customer_name"] }}
|
||||
@@ -235,132 +309,62 @@
|
||||
<br> {{ data[i]["supplier_name"] }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<div>
|
||||
{% if data[i]["remarks"] %}
|
||||
{{ _("Remarks") }}:
|
||||
{{ data[i]["remarks"] }}
|
||||
{% endif %}
|
||||
</div>
|
||||
<br>{{ _("Remarks") }}:
|
||||
{{ data[i]["remarks"] }}
|
||||
</td>
|
||||
{% endif %}
|
||||
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["invoiced"], currency=data[i]["currency"]) }}</td>
|
||||
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["paid"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["credit_note"], currency=data[i]["currency"]) }}</td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["outstanding"], currency=data[i]["currency"]) }}</td>
|
||||
|
||||
{% if(filters.show_future_payments) %}
|
||||
{% if(report.report_name == "Accounts Receivable") %}
|
||||
<td style="text-align: right">
|
||||
{{ data[i]["po_no"] }}</td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">{{ data[i]["future_ref"] }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["future_amount"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["remaining_balance"], currency=data[i]["currency"]) }}</td>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<td></td>
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<td></td>
|
||||
{% endif %}
|
||||
{% if(report.report_name == "Accounts Receivable" and filters.show_sales_person) %}
|
||||
<td></td>
|
||||
{% endif %}
|
||||
<td></td>
|
||||
<td style="text-align: right"><b>{{ _("Total") }}</b></td>
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["invoiced"], data[i]["currency"]) }}</td>
|
||||
|
||||
{% if not(filters.show_future_payments) %}
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["paid"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["credit_note"], currency=data[i]["currency"]) }} </td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">
|
||||
{{ frappe.utils.fmt_money(data[i]["outstanding"], currency=data[i]["currency"]) }}</td>
|
||||
|
||||
{% if(filters.show_future_payments) %}
|
||||
{% if(report.report_name == "Accounts Receivable") %}
|
||||
<td style="text-align: right">
|
||||
{{ data[i]["po_no"] }}</td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">{{ data[i]["future_ref"] }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["future_amount"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["remaining_balance"], currency=data[i]["currency"]) }}</td>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if(data[i]["party"] or " ") %}
|
||||
{% if not(data[i]["is_total_row"]) %}
|
||||
<td>
|
||||
{% if(not(filters.customer | filters.supplier)) %}
|
||||
{{ data[i]["party"] }}
|
||||
{% if(data[i]["customer_name"] and data[i]["customer_name"] != data[i]["party"]) %}
|
||||
<br> {{ data[i]["customer_name"] }}
|
||||
{% elif(data[i]["supplier_name"] != data[i]["party"]) %}
|
||||
<br> {{ data[i]["supplier_name"] }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<br>{{ _("Remarks") }}:
|
||||
{{ data[i]["remarks"] }}
|
||||
</td>
|
||||
{% else %}
|
||||
<td><b>{{ _("Total") }}</b></td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["invoiced"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["paid"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["credit_note"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["outstanding"], currency=data[i]["currency"]) }}</td>
|
||||
<td><b>{{ _("Total") }}</b></td>
|
||||
{% endif %}
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["invoiced"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["paid"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["credit_note"], currency=data[i]["currency"]) }}</td>
|
||||
<td style="text-align: right">{{ frappe.utils.fmt_money(data[i]["outstanding"], currency=data[i]["currency"]) }}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td style="text-align: right"><b>{{ frappe.utils.fmt_money(data|sum(attribute="invoiced"), currency=data[0]["currency"]) }}</b></td>
|
||||
<td style="text-align: right"><b>{{ frappe.utils.fmt_money(data|sum(attribute="paid"), currency=data[0]["currency"]) }}</b></td>
|
||||
<td style="text-align: right"><b>{{ frappe.utils.fmt_money(data|sum(attribute="credit_note"), currency=data[0]["currency"]) }}</b></td>
|
||||
<td style="text-align: right"><b>{{ frappe.utils.fmt_money(data|sum(attribute="outstanding"), currency=data[0]["currency"]) }}</b></td>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
{% if ageing %}
|
||||
<h4 class="text-center">{{ _("Ageing Report based on ") }} {{ ageing.ageing_based_on }}
|
||||
{{ _("up to " ) }} {{ frappe.format(filters.report_date, 'Date')}}
|
||||
</h4>
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 25%">0 - 30 Days</th>
|
||||
<th style="width: 25%">30 - 60 Days</th>
|
||||
<th style="width: 25%">60 - 90 Days</th>
|
||||
<th style="width: 25%">90 - 120 Days</th>
|
||||
<th style="width: 20%">Above 120 Days</th>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range1, currency=data[0]["currency"]) }}</td>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range2, currency=data[0]["currency"]) }}</td>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range3, currency=data[0]["currency"]) }}</td>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range4, currency=data[0]["currency"]) }}</td>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range5, currency=filters.presentation_currency) }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% if terms_and_conditions %}
|
||||
<div>
|
||||
{{ terms_and_conditions }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<p class="text-right text-muted">{{ _("Printed On ") }}{{ frappe.utils.now() }}</p>
|
||||
{% endfor %}
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td style="text-align: right"><b>{{ frappe.utils.fmt_money(data|sum(attribute="invoiced"), currency=data[0]["currency"]) }}</b></td>
|
||||
<td style="text-align: right"><b>{{ frappe.utils.fmt_money(data|sum(attribute="paid"), currency=data[0]["currency"]) }}</b></td>
|
||||
<td style="text-align: right"><b>{{ frappe.utils.fmt_money(data|sum(attribute="credit_note"), currency=data[0]["currency"]) }}</b></td>
|
||||
<td style="text-align: right"><b>{{ frappe.utils.fmt_money(data|sum(attribute="outstanding"), currency=data[0]["currency"]) }}</b></td>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
{% if ageing %}
|
||||
<h4 class="text-center">
|
||||
{{ _("Ageing Report based on {0} up to {1}").format(
|
||||
ageing.ageing_based_on,
|
||||
frappe.format(filters.report_date, "Date")
|
||||
) }}
|
||||
</h4>
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 25%">{{ _("0 - 30 Days") }}</th>
|
||||
<th style="width: 25%">{{ _("30 - 60 Days") }}</th>
|
||||
<th style="width: 25%">{{ _("60 - 90 Days") }}</th>
|
||||
<th style="width: 25%">{{ _("90 - 120 Days") }}</th>
|
||||
<th style="width: 20%">{{ _("Above 120 Days") }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range1, currency=data[0]["currency"]) }}</td>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range2, currency=data[0]["currency"]) }}</td>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range3, currency=data[0]["currency"]) }}</td>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range4, currency=data[0]["currency"]) }}</td>
|
||||
<td>{{ frappe.utils.fmt_money(ageing.range5, currency=filters.presentation_currency) }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endif %}
|
||||
{% if terms_and_conditions %}
|
||||
<div>
|
||||
{{ terms_and_conditions }}
|
||||
</div>
|
||||
{% endif %}
|
||||
<p class="text-right text-muted">{{ _("Printed on {0}").format(frappe.utils.now()) }}</p>
|
||||
|
||||
@@ -46,5 +46,11 @@ frappe.query_reports["Asset Depreciations and Balances"] = {
|
||||
options: "Asset",
|
||||
depends_on: "eval: doc.group_by == 'Asset'",
|
||||
},
|
||||
{
|
||||
fieldname: "finance_book",
|
||||
label: __("Finance Book"),
|
||||
fieldtype: "Link",
|
||||
options: "Finance Book",
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -69,6 +69,9 @@ def get_asset_categories_for_grouped_by_category(filters):
|
||||
condition = ""
|
||||
if filters.get("asset_category"):
|
||||
condition += " and asset_category = %(asset_category)s"
|
||||
if filters.get("finance_book"):
|
||||
condition += " and exists (select 1 from `tabAsset Depreciation Schedule` ads where ads.asset = a.name and ads.finance_book = %(finance_book)s)"
|
||||
|
||||
# nosemgrep
|
||||
return frappe.db.sql(
|
||||
f"""
|
||||
@@ -119,6 +122,7 @@ def get_asset_categories_for_grouped_by_category(filters):
|
||||
"from_date": filters.from_date,
|
||||
"company": filters.company,
|
||||
"asset_category": filters.get("asset_category"),
|
||||
"finance_book": filters.get("finance_book"),
|
||||
},
|
||||
as_dict=1,
|
||||
)
|
||||
@@ -128,6 +132,10 @@ def get_asset_details_for_grouped_by_category(filters):
|
||||
condition = ""
|
||||
if filters.get("asset"):
|
||||
condition += " and name = %(asset)s"
|
||||
if filters.get("finance_book"):
|
||||
condition += " and exists (select 1 from `tabAsset Depreciation Schedule` ads where ads.asset = `tabAsset`.name and ads.finance_book = %(finance_book)s)"
|
||||
|
||||
# nosemgrep
|
||||
return frappe.db.sql(
|
||||
f"""
|
||||
SELECT name,
|
||||
@@ -176,6 +184,7 @@ def get_asset_details_for_grouped_by_category(filters):
|
||||
"from_date": filters.from_date,
|
||||
"company": filters.company,
|
||||
"asset": filters.get("asset"),
|
||||
"finance_book": filters.get("finance_book"),
|
||||
},
|
||||
as_dict=1,
|
||||
)
|
||||
|
||||
@@ -46,4 +46,20 @@ frappe.query_reports["Bank Reconciliation Statement"] = {
|
||||
fieldtype: "Check",
|
||||
},
|
||||
],
|
||||
formatter: function (value, row, column, data, default_formatter, filter) {
|
||||
if (column.fieldname == "payment_entry" && value == "Cheques and Deposits incorrectly cleared") {
|
||||
column.link_onclick =
|
||||
"frappe.query_reports['Bank Reconciliation Statement'].open_utility_report()";
|
||||
}
|
||||
return default_formatter(value, row, column, data);
|
||||
},
|
||||
open_utility_report: function () {
|
||||
frappe.route_options = {
|
||||
company: frappe.query_report.get_filter_value("company"),
|
||||
account: frappe.query_report.get_filter_value("account"),
|
||||
report_date: frappe.query_report.get_filter_value("report_date"),
|
||||
};
|
||||
frappe.open_in_new_tab = true;
|
||||
frappe.set_route("query-report", "Cheques and Deposits Incorrectly cleared");
|
||||
},
|
||||
};
|
||||
|
||||
@@ -154,8 +154,8 @@ def get_payment_entries(filters):
|
||||
select
|
||||
"Payment Entry" as payment_document, name as payment_entry,
|
||||
reference_no, reference_date as ref_date,
|
||||
if(paid_to=%(account)s, received_amount, 0) as debit,
|
||||
if(paid_from=%(account)s, paid_amount, 0) as credit,
|
||||
if(paid_to=%(account)s, received_amount_after_tax, 0) as debit,
|
||||
if(paid_from=%(account)s, paid_amount_after_tax, 0) as credit,
|
||||
posting_date, ifnull(party,if(paid_from=%(account)s,paid_to,paid_from)) as against_account, clearance_date,
|
||||
if(paid_to=%(account)s, paid_to_account_currency, paid_from_account_currency) as account_currency
|
||||
from `tabPayment Entry`
|
||||
|
||||
@@ -694,12 +694,17 @@ class Asset(AccountsController):
|
||||
return cwip_account
|
||||
|
||||
def make_gl_entries(self):
|
||||
if self.check_asset_capitalization_gl_entries():
|
||||
return
|
||||
|
||||
gl_entries = []
|
||||
|
||||
purchase_document = self.get_purchase_document()
|
||||
fixed_asset_account, cwip_account = self.get_fixed_asset_account(), self.get_cwip_account()
|
||||
|
||||
if purchase_document and self.purchase_amount and getdate(self.available_for_use_date) <= getdate():
|
||||
if (self.is_composite_asset or (purchase_document and self.purchase_amount)) and getdate(
|
||||
self.available_for_use_date
|
||||
) <= getdate():
|
||||
gl_entries.append(
|
||||
self.get_gl_dict(
|
||||
{
|
||||
@@ -736,6 +741,24 @@ class Asset(AccountsController):
|
||||
make_gl_entries(gl_entries)
|
||||
self.db_set("booked_fixed_asset", 1)
|
||||
|
||||
def check_asset_capitalization_gl_entries(self):
|
||||
if self.is_composite_asset:
|
||||
result = frappe.db.get_value(
|
||||
"Asset Capitalization",
|
||||
{"target_asset": self.name, "docstatus": 1},
|
||||
["name", "target_fixed_asset_account"],
|
||||
)
|
||||
|
||||
if result:
|
||||
asset_capitalization, target_fixed_asset_account = result
|
||||
# Check GL entries for the retrieved Asset Capitalization and target fixed asset account
|
||||
return has_gl_entries(
|
||||
"Asset Capitalization", asset_capitalization, target_fixed_asset_account
|
||||
)
|
||||
# return if there are no submitted capitalization for given asset
|
||||
return True
|
||||
return False
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_depreciation_rate(self, args, on_validate=False):
|
||||
if isinstance(args, str):
|
||||
@@ -782,6 +805,22 @@ class Asset(AccountsController):
|
||||
return flt((100 * (1 - depreciation_rate)), float_precision)
|
||||
|
||||
|
||||
def has_gl_entries(doctype, docname, target_account):
|
||||
gl_entry = frappe.qb.DocType("GL Entry")
|
||||
gl_entries = (
|
||||
frappe.qb.from_(gl_entry)
|
||||
.select(gl_entry.account)
|
||||
.where(
|
||||
(gl_entry.voucher_type == doctype)
|
||||
& (gl_entry.voucher_no == docname)
|
||||
& (gl_entry.debit != 0)
|
||||
& (gl_entry.account == target_account)
|
||||
)
|
||||
.run(as_dict=True)
|
||||
)
|
||||
return len(gl_entries) > 0
|
||||
|
||||
|
||||
def update_maintenance_status():
|
||||
assets = frappe.get_all(
|
||||
"Asset", filters={"docstatus": 1, "maintenance_required": 1, "disposal_date": ("is", "not set")}
|
||||
|
||||
@@ -317,7 +317,16 @@ class AssetCapitalization(StockController):
|
||||
if not self.target_is_fixed_asset and not self.get("asset_items"):
|
||||
frappe.throw(_("Consumed Asset Items is mandatory for Decapitalization"))
|
||||
|
||||
if not (self.get("stock_items") or self.get("asset_items") or self.get("service_items")):
|
||||
if self.capitalization_method == "Create a new composite asset" and not (
|
||||
self.get("stock_items") or self.get("asset_items")
|
||||
):
|
||||
frappe.throw(
|
||||
_(
|
||||
"Consumed Stock Items or Consumed Asset Items are mandatory for creating new composite asset"
|
||||
)
|
||||
)
|
||||
|
||||
elif not (self.get("stock_items") or self.get("asset_items") or self.get("service_items")):
|
||||
frappe.throw(
|
||||
_(
|
||||
"Consumed Stock Items, Consumed Asset Items or Consumed Service Items is mandatory for Capitalization"
|
||||
@@ -460,13 +469,24 @@ class AssetCapitalization(StockController):
|
||||
self.get_gl_entries_for_consumed_asset_items(gl_entries, target_account, target_against, precision)
|
||||
self.get_gl_entries_for_consumed_service_items(gl_entries, target_account, target_against, precision)
|
||||
|
||||
self.get_gl_entries_for_target_item(gl_entries, target_against, precision)
|
||||
self.get_gl_entries_for_target_item(gl_entries, target_account, target_against, precision)
|
||||
|
||||
return gl_entries
|
||||
|
||||
def get_target_account(self):
|
||||
if self.target_is_fixed_asset:
|
||||
return self.target_fixed_asset_account
|
||||
from erpnext.assets.doctype.asset.asset import is_cwip_accounting_enabled
|
||||
|
||||
asset_category = frappe.get_cached_value("Asset", self.target_asset, "asset_category")
|
||||
if is_cwip_accounting_enabled(asset_category):
|
||||
target_account = get_asset_category_account(
|
||||
"capital_work_in_progress_account",
|
||||
asset_category=asset_category,
|
||||
company=self.company,
|
||||
)
|
||||
return target_account if target_account else self.target_fixed_asset_account
|
||||
else:
|
||||
return self.target_fixed_asset_account
|
||||
else:
|
||||
return self.warehouse_account[self.target_warehouse]["account"]
|
||||
|
||||
@@ -554,13 +574,13 @@ class AssetCapitalization(StockController):
|
||||
)
|
||||
)
|
||||
|
||||
def get_gl_entries_for_target_item(self, gl_entries, target_against, precision):
|
||||
def get_gl_entries_for_target_item(self, gl_entries, target_account, target_against, precision):
|
||||
if self.target_is_fixed_asset:
|
||||
# Capitalization
|
||||
gl_entries.append(
|
||||
self.get_gl_dict(
|
||||
{
|
||||
"account": self.target_fixed_asset_account,
|
||||
"account": target_account,
|
||||
"against": ", ".join(target_against),
|
||||
"remarks": self.get("remarks") or _("Accounting Entry for Asset"),
|
||||
"debit": flt(self.total_value, precision),
|
||||
|
||||
@@ -187,9 +187,10 @@ class TestAssetCapitalization(unittest.TestCase):
|
||||
# Test General Ledger Entries
|
||||
default_expense_account = frappe.db.get_value("Company", company, "default_expense_account")
|
||||
expected_gle = {
|
||||
"_Test Fixed Asset - _TC": 3000,
|
||||
"Expenses Included In Asset Valuation - _TC": -1000,
|
||||
default_expense_account: -2000,
|
||||
"_Test Fixed Asset - _TC": -100000.0,
|
||||
default_expense_account: -2000.0,
|
||||
"CWIP Account - _TC": 103000.0,
|
||||
"Expenses Included In Asset Valuation - _TC": -1000.0,
|
||||
}
|
||||
actual_gle = get_actual_gle_dict(asset_capitalization.name)
|
||||
|
||||
@@ -424,7 +425,7 @@ class TestAssetCapitalization(unittest.TestCase):
|
||||
self.assertEqual(target_asset.purchase_amount, total_amount)
|
||||
|
||||
expected_gle = {
|
||||
"_Test Fixed Asset - _TC": 1000.0,
|
||||
"CWIP Account - _TC": 1000.0,
|
||||
"Expenses Included In Asset Valuation - _TC": -1000.0,
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ frappe.provide("erpnext.accounts.dimensions");
|
||||
|
||||
frappe.ui.form.on("Asset Value Adjustment", {
|
||||
setup: function (frm) {
|
||||
frm.add_fetch("company", "cost_center", "cost_center");
|
||||
frm.set_query("cost_center", function () {
|
||||
return {
|
||||
filters: {
|
||||
@@ -22,6 +21,14 @@ frappe.ui.form.on("Asset Value Adjustment", {
|
||||
},
|
||||
};
|
||||
});
|
||||
frm.set_query("difference_account", function () {
|
||||
return {
|
||||
filters: {
|
||||
company: frm.doc.company,
|
||||
is_group: 0,
|
||||
},
|
||||
};
|
||||
});
|
||||
},
|
||||
|
||||
onload: function (frm) {
|
||||
@@ -37,7 +44,7 @@ frappe.ui.form.on("Asset Value Adjustment", {
|
||||
},
|
||||
|
||||
asset: function (frm) {
|
||||
frm.trigger("set_current_asset_value");
|
||||
frm.trigger("set_acc_dimension");
|
||||
},
|
||||
|
||||
finance_book: function (frm) {
|
||||
@@ -60,4 +67,15 @@ frappe.ui.form.on("Asset Value Adjustment", {
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
set_acc_dimension: function (frm) {
|
||||
if (frm.doc.asset) {
|
||||
frm.call({
|
||||
method: "erpnext.assets.doctype.asset_value_adjustment.asset_value_adjustment.get_value_of_accounting_dimensions",
|
||||
args: {
|
||||
asset_name: frm.doc.asset,
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
"new_asset_value",
|
||||
"column_break_11",
|
||||
"difference_amount",
|
||||
"difference_account",
|
||||
"journal_entry",
|
||||
"accounting_dimensions_section",
|
||||
"cost_center",
|
||||
@@ -54,6 +55,7 @@
|
||||
"fieldtype": "Link",
|
||||
"label": "Journal Entry",
|
||||
"options": "Journal Entry",
|
||||
"no_copy": 1,
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
@@ -79,6 +81,7 @@
|
||||
"fieldtype": "Currency",
|
||||
"in_list_view": 1,
|
||||
"label": "New Asset Value",
|
||||
"no_copy": 1,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
@@ -120,12 +123,20 @@
|
||||
{
|
||||
"fieldname": "column_break_11",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "difference_account",
|
||||
"fieldtype": "Link",
|
||||
"label": "Difference Account",
|
||||
"no_copy": 1,
|
||||
"options": "Account",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"is_submittable": 1,
|
||||
"links": [],
|
||||
"modified": "2024-03-27 13:06:36.004049",
|
||||
"modified": "2024-08-13 16:21:18.639208",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Assets",
|
||||
"name": "Asset Value Adjustment",
|
||||
|
||||
@@ -34,6 +34,7 @@ class AssetValueAdjustment(Document):
|
||||
cost_center: DF.Link | None
|
||||
current_asset_value: DF.Currency
|
||||
date: DF.Date
|
||||
difference_account: DF.Link
|
||||
difference_amount: DF.Currency
|
||||
finance_book: DF.Link | None
|
||||
journal_entry: DF.Link | None
|
||||
@@ -47,6 +48,7 @@ class AssetValueAdjustment(Document):
|
||||
|
||||
def on_submit(self):
|
||||
self.make_depreciation_entry()
|
||||
self.set_value_after_depreciation()
|
||||
self.update_asset(self.new_asset_value)
|
||||
add_asset_activity(
|
||||
self.asset,
|
||||
@@ -76,7 +78,10 @@ class AssetValueAdjustment(Document):
|
||||
)
|
||||
|
||||
def set_difference_amount(self):
|
||||
self.difference_amount = flt(self.current_asset_value - self.new_asset_value)
|
||||
self.difference_amount = flt(self.new_asset_value - self.current_asset_value)
|
||||
|
||||
def set_value_after_depreciation(self):
|
||||
frappe.db.set_value("Asset", self.asset, "value_after_depreciation", self.new_asset_value)
|
||||
|
||||
def set_current_asset_value(self):
|
||||
if not self.current_asset_value and self.asset:
|
||||
@@ -85,7 +90,7 @@ class AssetValueAdjustment(Document):
|
||||
def make_depreciation_entry(self):
|
||||
asset = frappe.get_doc("Asset", self.asset)
|
||||
(
|
||||
_,
|
||||
fixed_asset_account,
|
||||
accumulated_depreciation_account,
|
||||
depreciation_expense_account,
|
||||
) = get_depreciation_accounts(asset.asset_category, asset.company)
|
||||
@@ -95,28 +100,41 @@ class AssetValueAdjustment(Document):
|
||||
)
|
||||
|
||||
je = frappe.new_doc("Journal Entry")
|
||||
je.voucher_type = "Depreciation Entry"
|
||||
je.voucher_type = "Journal Entry"
|
||||
je.naming_series = depreciation_series
|
||||
je.posting_date = self.date
|
||||
je.company = self.company
|
||||
je.remark = f"Depreciation Entry against {self.asset} worth {self.difference_amount}"
|
||||
je.remark = f"Revaluation Entry against {self.asset} worth {self.difference_amount}"
|
||||
je.finance_book = self.finance_book
|
||||
|
||||
credit_entry = {
|
||||
"account": accumulated_depreciation_account,
|
||||
"credit_in_account_currency": self.difference_amount,
|
||||
"cost_center": depreciation_cost_center or self.cost_center,
|
||||
entry_template = {
|
||||
"cost_center": self.cost_center or depreciation_cost_center,
|
||||
"reference_type": "Asset",
|
||||
"reference_name": self.asset,
|
||||
"reference_name": asset.name,
|
||||
}
|
||||
|
||||
debit_entry = {
|
||||
"account": depreciation_expense_account,
|
||||
"debit_in_account_currency": self.difference_amount,
|
||||
"cost_center": depreciation_cost_center or self.cost_center,
|
||||
"reference_type": "Asset",
|
||||
"reference_name": self.asset,
|
||||
}
|
||||
if self.difference_amount < 0:
|
||||
credit_entry = {
|
||||
"account": fixed_asset_account,
|
||||
"credit_in_account_currency": -self.difference_amount,
|
||||
**entry_template,
|
||||
}
|
||||
debit_entry = {
|
||||
"account": self.difference_account,
|
||||
"debit_in_account_currency": -self.difference_amount,
|
||||
**entry_template,
|
||||
}
|
||||
elif self.difference_amount > 0:
|
||||
credit_entry = {
|
||||
"account": self.difference_account,
|
||||
"credit_in_account_currency": self.difference_amount,
|
||||
**entry_template,
|
||||
}
|
||||
debit_entry = {
|
||||
"account": fixed_asset_account,
|
||||
"debit_in_account_currency": self.difference_amount,
|
||||
**entry_template,
|
||||
}
|
||||
|
||||
accounting_dimensions = get_checks_for_pl_and_bs_accounts()
|
||||
|
||||
@@ -179,3 +197,9 @@ class AssetValueAdjustment(Document):
|
||||
)
|
||||
asset.flags.ignore_validate_update_after_submit = True
|
||||
asset.save()
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_value_of_accounting_dimensions(asset_name):
|
||||
dimension_fields = [*frappe.get_list("Accounting Dimension", pluck="fieldname"), "cost_center"]
|
||||
return frappe.db.get_value("Asset", asset_name, fieldname=dimension_fields, as_dict=True)
|
||||
|
||||
@@ -93,8 +93,8 @@ class TestAssetValueAdjustment(unittest.TestCase):
|
||||
self.assertEqual(first_asset_depr_schedule.status, "Cancelled")
|
||||
|
||||
expected_gle = (
|
||||
("_Test Accumulated Depreciations - _TC", 0.0, 4625.29),
|
||||
("_Test Depreciations - _TC", 4625.29, 0.0),
|
||||
("_Test Difference Account - _TC", 4625.29, 0.0),
|
||||
("_Test Fixed Asset - _TC", 0.0, 4625.29),
|
||||
)
|
||||
|
||||
gle = frappe.db.sql(
|
||||
@@ -177,8 +177,8 @@ class TestAssetValueAdjustment(unittest.TestCase):
|
||||
|
||||
# Test gl entry creted from asset value adjustemnet
|
||||
expected_gle = (
|
||||
("_Test Accumulated Depreciations - _TC", 0.0, 5625.29),
|
||||
("_Test Depreciations - _TC", 5625.29, 0.0),
|
||||
("_Test Difference Account - _TC", 5625.29, 0.0),
|
||||
("_Test Fixed Asset - _TC", 0.0, 5625.29),
|
||||
)
|
||||
|
||||
gle = frappe.db.sql(
|
||||
@@ -259,6 +259,39 @@ class TestAssetValueAdjustment(unittest.TestCase):
|
||||
|
||||
self.assertEqual(schedules, expected_schedules)
|
||||
|
||||
def test_difference_amount(self):
|
||||
pr = make_purchase_receipt(item_code="Macbook Pro", qty=1, rate=120000.0, location="Test Location")
|
||||
|
||||
asset_name = frappe.db.get_value("Asset", {"purchase_receipt": pr.name}, "name")
|
||||
asset_doc = frappe.get_doc("Asset", asset_name)
|
||||
asset_doc.calculate_depreciation = 1
|
||||
asset_doc.available_for_use_date = "2023-01-15"
|
||||
asset_doc.purchase_date = "2023-01-15"
|
||||
|
||||
asset_doc.append(
|
||||
"finance_books",
|
||||
{
|
||||
"expected_value_after_useful_life": 200,
|
||||
"depreciation_method": "Straight Line",
|
||||
"total_number_of_depreciations": 12,
|
||||
"frequency_of_depreciation": 1,
|
||||
"depreciation_start_date": "2023-01-31",
|
||||
},
|
||||
)
|
||||
asset_doc.submit()
|
||||
|
||||
adj_doc = make_asset_value_adjustment(
|
||||
asset=asset_doc.name,
|
||||
current_asset_value=54000,
|
||||
new_asset_value=50000.0,
|
||||
date="2023-08-21",
|
||||
)
|
||||
adj_doc.submit()
|
||||
difference_amount = adj_doc.new_asset_value - adj_doc.current_asset_value
|
||||
self.assertEqual(difference_amount, -4000)
|
||||
asset_doc.load_from_db()
|
||||
self.assertEqual(asset_doc.value_after_depreciation, 50000.0)
|
||||
|
||||
|
||||
def make_asset_value_adjustment(**args):
|
||||
args = frappe._dict(args)
|
||||
@@ -272,7 +305,22 @@ def make_asset_value_adjustment(**args):
|
||||
"new_asset_value": args.new_asset_value,
|
||||
"current_asset_value": args.current_asset_value,
|
||||
"cost_center": args.cost_center or "Main - _TC",
|
||||
"difference_account": make_difference_account(),
|
||||
}
|
||||
).insert()
|
||||
|
||||
return doc
|
||||
|
||||
|
||||
def make_difference_account(**args):
|
||||
account = "_Test Difference Account - _TC"
|
||||
if not frappe.db.exists("Account", account):
|
||||
acc = frappe.new_doc("Account")
|
||||
acc.account_name = "_Test Difference Account"
|
||||
acc.parent_account = "Direct Income - _TC"
|
||||
acc.company = "_Test Company"
|
||||
acc.is_group = 0
|
||||
acc.insert()
|
||||
return acc.name
|
||||
else:
|
||||
return account
|
||||
|
||||
@@ -97,7 +97,7 @@ class Supplier(TransactionBase):
|
||||
elif supp_master_name == "Naming Series":
|
||||
set_name_by_naming_series(self)
|
||||
else:
|
||||
self.name = set_name_from_naming_options(frappe.get_meta(self.doctype).autoname, self)
|
||||
set_name_from_naming_options(frappe.get_meta(self.doctype).autoname, self)
|
||||
|
||||
def on_update(self):
|
||||
self.create_primary_contact()
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
// Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.query_reports["Item-wise Purchase History"] = {
|
||||
filters: [
|
||||
{
|
||||
fieldname: "company",
|
||||
label: __("Company"),
|
||||
fieldtype: "Link",
|
||||
options: "Company",
|
||||
default: frappe.defaults.get_user_default("Company"),
|
||||
reqd: 1,
|
||||
},
|
||||
{
|
||||
fieldname: "from_date",
|
||||
reqd: 1,
|
||||
label: __("From Date"),
|
||||
fieldtype: "Date",
|
||||
default: frappe.datetime.add_months(frappe.datetime.get_today(), -1),
|
||||
},
|
||||
{
|
||||
fieldname: "to_date",
|
||||
reqd: 1,
|
||||
default: frappe.datetime.get_today(),
|
||||
label: __("To Date"),
|
||||
fieldtype: "Date",
|
||||
},
|
||||
{
|
||||
fieldname: "item_group",
|
||||
label: __("Item Group"),
|
||||
fieldtype: "Link",
|
||||
options: "Item Group",
|
||||
},
|
||||
{
|
||||
fieldname: "item_code",
|
||||
label: __("Item"),
|
||||
fieldtype: "Link",
|
||||
options: "Item",
|
||||
get_query: () => {
|
||||
return {
|
||||
query: "erpnext.controllers.queries.item_query",
|
||||
};
|
||||
},
|
||||
},
|
||||
{
|
||||
fieldname: "supplier",
|
||||
label: __("Supplier"),
|
||||
fieldtype: "Link",
|
||||
options: "Supplier",
|
||||
},
|
||||
],
|
||||
|
||||
formatter: function (value, row, column, data, default_formatter) {
|
||||
value = default_formatter(value, row, column, data);
|
||||
let format_fields = ["received_qty", "billed_amt"];
|
||||
|
||||
if (format_fields.includes(column.fieldname) && data && data[column.fieldname] > 0) {
|
||||
value = "<span style='color:green;'>" + value + "</span>";
|
||||
}
|
||||
return value;
|
||||
},
|
||||
};
|
||||
@@ -1,30 +1,30 @@
|
||||
{
|
||||
"add_total_row": 1,
|
||||
"apply_user_permissions": 1,
|
||||
"creation": "2013-05-03 14:55:53",
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"idx": 3,
|
||||
"is_standard": "Yes",
|
||||
"modified": "2017-02-24 20:08:57.446613",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Item-wise Purchase History",
|
||||
"owner": "Administrator",
|
||||
"query": "select\n po_item.item_code as \"Item Code:Link/Item:120\",\n\tpo_item.item_name as \"Item Name::120\",\n po_item.item_group as \"Item Group:Link/Item Group:120\",\n\tpo_item.description as \"Description::150\",\n\tpo_item.qty as \"Qty:Float:100\",\n\tpo_item.uom as \"UOM:Link/UOM:80\",\n\tpo_item.base_rate as \"Rate:Currency:120\",\n\tpo_item.base_amount as \"Amount:Currency:120\",\n\tpo.name as \"Purchase Order:Link/Purchase Order:120\",\n\tpo.transaction_date as \"Transaction Date:Date:140\",\n\tpo.supplier as \"Supplier:Link/Supplier:130\",\n sup.supplier_name as \"Supplier Name::150\",\n\tpo_item.project as \"Project:Link/Project:130\",\n\tifnull(po_item.received_qty, 0) as \"Received Qty:Float:120\",\n\tpo.company as \"Company:Link/Company:\"\nfrom\n\t`tabPurchase Order` po, `tabPurchase Order Item` po_item, `tabSupplier` sup\nwhere\n\tpo.name = po_item.parent and po.supplier = sup.name and po.docstatus = 1\norder by po.name desc",
|
||||
"ref_doctype": "Purchase Order",
|
||||
"report_name": "Item-wise Purchase History",
|
||||
"report_type": "Query Report",
|
||||
"add_total_row": 1,
|
||||
"creation": "2013-05-03 14:55:53",
|
||||
"disable_prepared_report": 0,
|
||||
"disabled": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "Report",
|
||||
"idx": 5,
|
||||
"is_standard": "Yes",
|
||||
"modified": "2024-06-19 12:12:15.418799",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Buying",
|
||||
"name": "Item-wise Purchase History",
|
||||
"owner": "Administrator",
|
||||
"prepared_report": 0,
|
||||
"ref_doctype": "Purchase Order",
|
||||
"report_name": "Item-wise Purchase History",
|
||||
"report_type": "Script Report",
|
||||
"roles": [
|
||||
{
|
||||
"role": "Stock User"
|
||||
},
|
||||
},
|
||||
{
|
||||
"role": "Purchase Manager"
|
||||
},
|
||||
},
|
||||
{
|
||||
"role": "Purchase User"
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,276 @@
|
||||
# Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.utils import flt
|
||||
from frappe.utils.nestedset import get_descendants_of
|
||||
|
||||
|
||||
def execute(filters=None):
|
||||
filters = frappe._dict(filters or {})
|
||||
if filters.from_date > filters.to_date:
|
||||
frappe.throw(_("From Date cannot be greater than To Date"))
|
||||
|
||||
columns = get_columns(filters)
|
||||
data = get_data(filters)
|
||||
|
||||
chart_data = get_chart_data(data)
|
||||
|
||||
return columns, data, None, chart_data
|
||||
|
||||
|
||||
def get_columns(filters):
|
||||
return [
|
||||
{
|
||||
"label": _("Item Code"),
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "item_code",
|
||||
"options": "Item",
|
||||
"width": 120,
|
||||
},
|
||||
{
|
||||
"label": _("Item Name"),
|
||||
"fieldtype": "Data",
|
||||
"fieldname": "item_name",
|
||||
"width": 140,
|
||||
},
|
||||
{
|
||||
"label": _("Item Group"),
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "item_group",
|
||||
"options": "Item Group",
|
||||
"width": 120,
|
||||
},
|
||||
{
|
||||
"label": _("Description"),
|
||||
"fieldtype": "Data",
|
||||
"fieldname": "description",
|
||||
"width": 140,
|
||||
},
|
||||
{
|
||||
"label": _("Quantity"),
|
||||
"fieldtype": "Float",
|
||||
"fieldname": "quantity",
|
||||
"width": 120,
|
||||
},
|
||||
{
|
||||
"label": _("UOM"),
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "uom",
|
||||
"options": "UOM",
|
||||
"width": 90,
|
||||
},
|
||||
{
|
||||
"label": _("Rate"),
|
||||
"fieldname": "rate",
|
||||
"fieldtype": "Currency",
|
||||
"options": "currency",
|
||||
"width": 120,
|
||||
},
|
||||
{
|
||||
"label": _("Amount"),
|
||||
"fieldname": "amount",
|
||||
"fieldtype": "Currency",
|
||||
"options": "currency",
|
||||
"width": 120,
|
||||
},
|
||||
{
|
||||
"label": _("Purchase Order"),
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "purchase_order",
|
||||
"options": "Purchase Order",
|
||||
"width": 160,
|
||||
},
|
||||
{
|
||||
"label": _("Transaction Date"),
|
||||
"fieldtype": "Date",
|
||||
"fieldname": "transaction_date",
|
||||
"width": 110,
|
||||
},
|
||||
{
|
||||
"label": _("Supplier"),
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "supplier",
|
||||
"options": "Supplier",
|
||||
"width": 100,
|
||||
},
|
||||
{
|
||||
"label": _("Supplier Name"),
|
||||
"fieldtype": "Data",
|
||||
"fieldname": "supplier_name",
|
||||
"width": 140,
|
||||
},
|
||||
{
|
||||
"label": _("Supplier Group"),
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "supplier_group",
|
||||
"options": "Supplier Group",
|
||||
"width": 120,
|
||||
},
|
||||
{
|
||||
"label": _("Project"),
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "project",
|
||||
"options": "Project",
|
||||
"width": 100,
|
||||
},
|
||||
{
|
||||
"label": _("Received Quantity"),
|
||||
"fieldtype": "Float",
|
||||
"fieldname": "received_qty",
|
||||
"width": 150,
|
||||
},
|
||||
{
|
||||
"label": _("Billed Amount"),
|
||||
"fieldtype": "Currency",
|
||||
"fieldname": "billed_amt",
|
||||
"options": "currency",
|
||||
"width": 120,
|
||||
},
|
||||
{
|
||||
"label": _("Company"),
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "company",
|
||||
"options": "Company",
|
||||
"width": 100,
|
||||
},
|
||||
{
|
||||
"label": _("Currency"),
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "currency",
|
||||
"options": "Currency",
|
||||
"hidden": 1,
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def get_data(filters):
|
||||
data = []
|
||||
|
||||
company_list = get_descendants_of("Company", filters.get("company"))
|
||||
company_list.append(filters.get("company"))
|
||||
|
||||
supplier_details = get_supplier_details()
|
||||
item_details = get_item_details()
|
||||
purchase_order_records = get_purchase_order_details(company_list, filters)
|
||||
|
||||
for record in purchase_order_records:
|
||||
supplier_record = supplier_details.get(record.supplier)
|
||||
item_record = item_details.get(record.item_code)
|
||||
row = {
|
||||
"item_code": record.get("item_code"),
|
||||
"item_name": item_record.get("item_name"),
|
||||
"item_group": item_record.get("item_group"),
|
||||
"description": record.get("description"),
|
||||
"quantity": record.get("qty"),
|
||||
"uom": record.get("uom"),
|
||||
"rate": record.get("base_rate"),
|
||||
"amount": record.get("base_amount"),
|
||||
"purchase_order": record.get("name"),
|
||||
"transaction_date": record.get("transaction_date"),
|
||||
"supplier": record.get("supplier"),
|
||||
"supplier_name": supplier_record.get("supplier_name"),
|
||||
"supplier_group": supplier_record.get("supplier_group"),
|
||||
"project": record.get("project"),
|
||||
"received_qty": flt(record.get("received_qty")),
|
||||
"billed_amt": flt(record.get("billed_amt")),
|
||||
"company": record.get("company"),
|
||||
}
|
||||
row["currency"] = frappe.get_cached_value("Company", row["company"], "default_currency")
|
||||
data.append(row)
|
||||
|
||||
return data
|
||||
|
||||
|
||||
def get_supplier_details():
|
||||
details = frappe.get_all("Supplier", fields=["name", "supplier_name", "supplier_group"])
|
||||
supplier_details = {}
|
||||
for d in details:
|
||||
supplier_details.setdefault(
|
||||
d.name,
|
||||
frappe._dict({"supplier_name": d.supplier_name, "supplier_group": d.supplier_group}),
|
||||
)
|
||||
return supplier_details
|
||||
|
||||
|
||||
def get_item_details():
|
||||
details = frappe.db.get_all("Item", fields=["name", "item_name", "item_group"])
|
||||
item_details = {}
|
||||
for d in details:
|
||||
item_details.setdefault(d.name, frappe._dict({"item_name": d.item_name, "item_group": d.item_group}))
|
||||
return item_details
|
||||
|
||||
|
||||
def get_purchase_order_details(company_list, filters):
|
||||
db_po = frappe.qb.DocType("Purchase Order")
|
||||
db_po_item = frappe.qb.DocType("Purchase Order Item")
|
||||
|
||||
query = (
|
||||
frappe.qb.from_(db_po)
|
||||
.inner_join(db_po_item)
|
||||
.on(db_po_item.parent == db_po.name)
|
||||
.select(
|
||||
db_po.name,
|
||||
db_po.supplier,
|
||||
db_po.transaction_date,
|
||||
db_po.project,
|
||||
db_po.company,
|
||||
db_po_item.item_code,
|
||||
db_po_item.description,
|
||||
db_po_item.qty,
|
||||
db_po_item.uom,
|
||||
db_po_item.base_rate,
|
||||
db_po_item.base_amount,
|
||||
db_po_item.received_qty,
|
||||
(db_po_item.billed_amt * db_po.conversion_rate).as_("billed_amt"),
|
||||
)
|
||||
.where(db_po.docstatus == 1)
|
||||
.where(db_po.company.isin(tuple(company_list)))
|
||||
)
|
||||
|
||||
for field in ("item_code", "item_group"):
|
||||
if filters.get(field):
|
||||
query = query.where(db_po_item[field] == filters[field])
|
||||
|
||||
if filters.get("from_date"):
|
||||
query = query.where(db_po.transaction_date >= filters.from_date)
|
||||
|
||||
if filters.get("to_date"):
|
||||
query = query.where(db_po.transaction_date <= filters.to_date)
|
||||
|
||||
if filters.get("supplier"):
|
||||
query = query.where(db_po.supplier == filters.supplier)
|
||||
|
||||
return query.run(as_dict=1)
|
||||
|
||||
|
||||
def get_chart_data(data):
|
||||
item_wise_purchase_map = {}
|
||||
labels, datapoints = [], []
|
||||
|
||||
for row in data:
|
||||
item_key = row.get("item_code")
|
||||
|
||||
if item_key not in item_wise_purchase_map:
|
||||
item_wise_purchase_map[item_key] = 0
|
||||
|
||||
item_wise_purchase_map[item_key] = flt(item_wise_purchase_map[item_key]) + flt(row.get("amount"))
|
||||
|
||||
item_wise_purchase_map = {
|
||||
item: value
|
||||
for item, value in (sorted(item_wise_purchase_map.items(), key=lambda i: i[1], reverse=True))
|
||||
}
|
||||
|
||||
for key in item_wise_purchase_map:
|
||||
labels.append(key)
|
||||
datapoints.append(item_wise_purchase_map[key])
|
||||
|
||||
return {
|
||||
"data": {
|
||||
"labels": labels[:30], # show max of 30 items in chart
|
||||
"datasets": [{"name": _("Total Purchase Amount"), "values": datapoints[:30]}],
|
||||
},
|
||||
"type": "bar",
|
||||
"fieldtype": "Currency",
|
||||
}
|
||||
@@ -16,11 +16,11 @@ add_to_apps_screen = [
|
||||
"logo": "/assets/erpnext/images/erpnext-logo-blue.png",
|
||||
"title": "ERPNext",
|
||||
"route": "/app/home",
|
||||
# "has_permission": "erpnext.api.permission.has_app_permission"
|
||||
"has_permission": "erpnext.check_app_permission",
|
||||
}
|
||||
]
|
||||
|
||||
develop_version = "14.x.x-develop"
|
||||
develop_version = "15.x.x-develop"
|
||||
|
||||
app_include_js = "erpnext.bundle.js"
|
||||
app_include_css = "erpnext.bundle.css"
|
||||
@@ -547,6 +547,8 @@ accounting_dimension_doctypes = [
|
||||
"Payment Reconciliation",
|
||||
"Payment Reconciliation Allocation",
|
||||
"Payment Request",
|
||||
"Asset Movement Item",
|
||||
"Asset Depreciation Schedule",
|
||||
]
|
||||
|
||||
get_matching_queries = (
|
||||
|
||||
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: info@erpnext.com\n"
|
||||
"POT-Creation-Date: 2024-08-18 09:35+0000\n"
|
||||
"PO-Revision-Date: 2024-08-18 12:36\n"
|
||||
"PO-Revision-Date: 2024-08-28 15:39\n"
|
||||
"Last-Translator: info@erpnext.com\n"
|
||||
"Language-Team: German\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -1956,7 +1956,7 @@ msgstr "Konto: {0} mit Währung: {1} kann nicht ausgewählt werden"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:1
|
||||
msgid "Accountant"
|
||||
msgstr ""
|
||||
msgstr "Buchhalter:in"
|
||||
|
||||
#. Label of the section_break_19 (Section Break) field in DocType 'POS Profile'
|
||||
#. Label of the accounting (Section Break) field in DocType 'Purchase Invoice
|
||||
@@ -3712,7 +3712,7 @@ msgstr "Anpassung basierend auf dem Rechnungspreis"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:2
|
||||
msgid "Administrative Assistant"
|
||||
msgstr ""
|
||||
msgstr "Verwaltungsassistent:in"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:54
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:79
|
||||
@@ -3721,7 +3721,7 @@ msgstr "Verwaltungskosten"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:3
|
||||
msgid "Administrative Officer"
|
||||
msgstr ""
|
||||
msgstr "Verwaltungsangestellte:r"
|
||||
|
||||
#. Name of a role
|
||||
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
|
||||
@@ -3838,15 +3838,15 @@ msgstr "Anzahlungen"
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:3
|
||||
msgid "Advertisement"
|
||||
msgstr ""
|
||||
msgstr "Werbung"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:2
|
||||
msgid "Advertising"
|
||||
msgstr ""
|
||||
msgstr "Werbung"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:3
|
||||
msgid "Aerospace"
|
||||
msgstr ""
|
||||
msgstr "Luft- und Raumfahrt"
|
||||
|
||||
#. Label of the affected_transactions (Code) field in DocType 'Repost Item
|
||||
#. Valuation'
|
||||
@@ -4073,7 +4073,7 @@ msgstr "Tagesordnung"
|
||||
|
||||
#: setup/setup_wizard/data/sales_partner_type.txt:4
|
||||
msgid "Agent"
|
||||
msgstr ""
|
||||
msgstr "Agent"
|
||||
|
||||
#. Label of the agent_busy_message (Data) field in DocType 'Incoming Call
|
||||
#. Settings'
|
||||
@@ -4118,7 +4118,7 @@ msgstr "Fassen Sie eine Gruppe von Artikeln in einem anderen Artikel zusammen. D
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:4
|
||||
msgid "Agriculture"
|
||||
msgstr ""
|
||||
msgstr "Landwirtschaft"
|
||||
|
||||
#. Name of a role
|
||||
#: assets/doctype/location/location.json
|
||||
@@ -4132,7 +4132,7 @@ msgstr "Benutzer Landwirtschaft"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:5
|
||||
msgid "Airline"
|
||||
msgstr ""
|
||||
msgstr "Fluggesellschaft"
|
||||
|
||||
#. Label of the algorithm (Select) field in DocType 'Bisect Accounting
|
||||
#. Statements'
|
||||
@@ -4506,7 +4506,7 @@ msgstr "Zulassen, dass ein Element in einer Transaktion mehrmals hinzugefügt wi
|
||||
|
||||
#: controllers/selling_controller.py:697
|
||||
msgid "Allow Item to Be Added Multiple Times in a Transaction"
|
||||
msgstr ""
|
||||
msgstr "Mehrfaches Hinzufügen von Artikeln in einer Transaktion zulassen"
|
||||
|
||||
#. Label of the allow_multiple_items (Check) field in DocType 'Selling
|
||||
#. Settings'
|
||||
@@ -5296,7 +5296,7 @@ msgstr "Beim Erstellen von Materialanfragen basierend auf der Nachbestellstufe i
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:4
|
||||
msgid "Analyst"
|
||||
msgstr ""
|
||||
msgstr "Analyst"
|
||||
|
||||
#: accounts/doctype/budget/budget.py:235
|
||||
msgid "Annual"
|
||||
@@ -5346,7 +5346,7 @@ msgstr "Einer der folgenden Filter ist erforderlich: Lager, Artikelcode, Artikel
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:6
|
||||
msgid "Apparel & Accessories"
|
||||
msgstr ""
|
||||
msgstr "Bekleidung & Accessoires"
|
||||
|
||||
#. Label of the applicable_charges (Currency) field in DocType 'Landed Cost
|
||||
#. Item'
|
||||
@@ -6796,7 +6796,7 @@ msgstr "Ausgleichsbuchung automatisch vornehmen"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:7
|
||||
msgid "Automotive"
|
||||
msgstr ""
|
||||
msgstr "Automobilindustrie"
|
||||
|
||||
#. Label of the availability_of_slots (Table) field in DocType 'Appointment
|
||||
#. Booking Settings'
|
||||
@@ -7004,7 +7004,7 @@ msgstr "Breitensuche"
|
||||
#. Request Plan Item'
|
||||
#: manufacturing/doctype/material_request_plan_item/material_request_plan_item.json
|
||||
msgid "BIN Qty"
|
||||
msgstr ""
|
||||
msgstr "BIN Menge"
|
||||
|
||||
#. Label of the bom (Link) field in DocType 'Purchase Invoice Item'
|
||||
#. Option for the 'Backflush Raw Materials of Subcontract Based On' (Select)
|
||||
@@ -8415,7 +8415,7 @@ msgstr "Biot"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:9
|
||||
msgid "Biotechnology"
|
||||
msgstr ""
|
||||
msgstr "Biotechnologie"
|
||||
|
||||
#. Name of a DocType
|
||||
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
|
||||
@@ -8760,11 +8760,11 @@ msgstr "Ausfall"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:10
|
||||
msgid "Broadcasting"
|
||||
msgstr ""
|
||||
msgstr "Rundfunk"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:11
|
||||
msgid "Brokerage"
|
||||
msgstr ""
|
||||
msgstr "Makler"
|
||||
|
||||
#: manufacturing/doctype/bom/bom.js:144
|
||||
msgid "Browse BOM"
|
||||
@@ -10262,7 +10262,7 @@ msgstr "Kaufabwicklung / Bestellung abschicken / Neue Bestellung"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:12
|
||||
msgid "Chemical"
|
||||
msgstr ""
|
||||
msgstr "Chemische Industrie"
|
||||
|
||||
#. Option for the 'Salary Mode' (Select) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
@@ -10323,19 +10323,19 @@ msgstr "Schecks und Kautionen fälschlicherweise gelöscht"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:9
|
||||
msgid "Chief Executive Officer"
|
||||
msgstr ""
|
||||
msgstr "Geschäftsführer"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:10
|
||||
msgid "Chief Financial Officer"
|
||||
msgstr ""
|
||||
msgstr "Finanzvorstand"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:11
|
||||
msgid "Chief Operating Officer"
|
||||
msgstr ""
|
||||
msgstr "Operativer Geschäftsführer"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:12
|
||||
msgid "Chief Technology Officer"
|
||||
msgstr ""
|
||||
msgstr "Technischer Leiter"
|
||||
|
||||
#. Label of the child_docname (Data) field in DocType 'Pricing Rule Detail'
|
||||
#: accounts/doctype/pricing_rule_detail/pricing_rule_detail.json
|
||||
@@ -10658,7 +10658,7 @@ msgstr "Code"
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:4
|
||||
msgid "Cold Calling"
|
||||
msgstr ""
|
||||
msgstr "Kaltakquise"
|
||||
|
||||
#: public/js/setup_wizard.js:190
|
||||
msgid "Collapse All"
|
||||
@@ -10714,7 +10714,7 @@ msgstr "Spalte {0}"
|
||||
|
||||
#: accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:52
|
||||
msgid "Columns are not according to template. Please compare the uploaded file with standard template"
|
||||
msgstr ""
|
||||
msgstr "Die Spalten stimmen nicht mit der Vorlage überein. Bitte vergleichen Sie die hochgeladene Datei mit der Standardvorlage"
|
||||
|
||||
#: accounts/doctype/payment_terms_template/payment_terms_template.py:39
|
||||
msgid "Combined invoice portion must equal 100%"
|
||||
@@ -11659,7 +11659,7 @@ msgstr "Fertigstellungstermin"
|
||||
|
||||
#: assets/doctype/asset_repair/asset_repair.py:66
|
||||
msgid "Completion Date can not be before Failure Date. Please adjust the dates accordingly."
|
||||
msgstr ""
|
||||
msgstr "Das Fertigstellungsdatum kann nicht vor dem Ausfalldatum liegen. Bitte passen Sie die Daten entsprechend an."
|
||||
|
||||
#. Label of the completion_status (Select) field in DocType 'Maintenance
|
||||
#. Schedule Detail'
|
||||
@@ -11891,7 +11891,7 @@ msgstr "Berater"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:14
|
||||
msgid "Consulting"
|
||||
msgstr ""
|
||||
msgstr "Beratung"
|
||||
|
||||
#: setup/setup_wizard/operations/install_fixtures.py:64
|
||||
msgid "Consumable"
|
||||
@@ -11979,7 +11979,7 @@ msgstr "Wert des verbrauchten Lagerbestands"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:15
|
||||
msgid "Consumer Products"
|
||||
msgstr ""
|
||||
msgstr "Konsumgüter"
|
||||
|
||||
#: stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py:175
|
||||
#: stock/report/stock_ledger_variance/stock_ledger_variance.py:99
|
||||
@@ -12477,7 +12477,7 @@ msgstr "Korrektur / Vorbeugung"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:16
|
||||
msgid "Cosmetics"
|
||||
msgstr ""
|
||||
msgstr "Kosmetik"
|
||||
|
||||
#. Label of the cost (Currency) field in DocType 'Subscription Plan'
|
||||
#: accounts/doctype/subscription_plan/subscription_plan.json
|
||||
@@ -14737,7 +14737,7 @@ msgstr "Kundenservice"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:13
|
||||
msgid "Customer Service Representative"
|
||||
msgstr ""
|
||||
msgstr "Kundendienstmitarbeiter:in"
|
||||
|
||||
#. Label of the customer_territory (Link) field in DocType 'Loyalty Program'
|
||||
#: accounts/doctype/loyalty_program/loyalty_program.json
|
||||
@@ -15938,7 +15938,7 @@ msgstr "Standardeinstellungen"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:17
|
||||
msgid "Defense"
|
||||
msgstr ""
|
||||
msgstr "Verteidigung"
|
||||
|
||||
#. Label of the deferred_accounting_section (Section Break) field in DocType
|
||||
#. 'Item'
|
||||
@@ -16150,7 +16150,7 @@ msgstr ""
|
||||
#. Title of an incoterm
|
||||
#: setup/doctype/incoterm/incoterms.csv:11
|
||||
msgid "Delivered At Place Unloaded"
|
||||
msgstr ""
|
||||
msgstr "Geliefert Benannter Ort Entladen"
|
||||
|
||||
#. Label of the delivered_by_supplier (Check) field in DocType 'POS Invoice
|
||||
#. Item'
|
||||
@@ -16164,7 +16164,7 @@ msgstr "Geliefert von Lieferant"
|
||||
#. Title of an incoterm
|
||||
#: setup/doctype/incoterm/incoterms.csv:12
|
||||
msgid "Delivered Duty Paid"
|
||||
msgstr ""
|
||||
msgstr "Geliefert Verzollt"
|
||||
|
||||
#. Name of a report
|
||||
#. Label of a Link in the Receivables Workspace
|
||||
@@ -16420,7 +16420,7 @@ msgstr "Abteilung"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:18
|
||||
msgid "Department Stores"
|
||||
msgstr ""
|
||||
msgstr "Kaufhäuser"
|
||||
|
||||
#. Label of the departure_time (Datetime) field in DocType 'Delivery Trip'
|
||||
#: stock/doctype/delivery_trip/delivery_trip.json
|
||||
@@ -16905,7 +16905,7 @@ msgstr "Position"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:14
|
||||
msgid "Designer"
|
||||
msgstr ""
|
||||
msgstr "Designer"
|
||||
|
||||
#. Name of a role
|
||||
#: crm/doctype/lead/lead.json projects/doctype/project/project.json
|
||||
@@ -18464,7 +18464,7 @@ msgstr "Elektronisches Rechnungsregister"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:20
|
||||
msgid "Electronics"
|
||||
msgstr ""
|
||||
msgstr "Elektronik"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -19070,11 +19070,11 @@ msgstr "Ende des aktuellen Abonnementzeitraums"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:21
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
msgstr "Energie"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:15
|
||||
msgid "Engineer"
|
||||
msgstr ""
|
||||
msgstr "Ingenieur"
|
||||
|
||||
#: manufacturing/report/bom_stock_report/bom_stock_report.html:13
|
||||
#: manufacturing/report/bom_stock_report/bom_stock_report.html:23
|
||||
@@ -19202,7 +19202,7 @@ msgstr "Geben Sie den Betrag {0} ein."
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:22
|
||||
msgid "Entertainment & Leisure"
|
||||
msgstr ""
|
||||
msgstr "Unterhaltung & Freizeit"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:57
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:82
|
||||
@@ -19379,7 +19379,7 @@ msgstr "Auch Rechnungen, bei denen die Option „Steuereinbehalt anwenden“ nic
|
||||
#. Title of an incoterm
|
||||
#: setup/doctype/incoterm/incoterms.csv:2
|
||||
msgid "Ex Works"
|
||||
msgstr ""
|
||||
msgstr "Ab Werk"
|
||||
|
||||
#. Label of the url (Data) field in DocType 'Currency Exchange Settings'
|
||||
#: accounts/doctype/currency_exchange_settings/currency_exchange_settings.json
|
||||
@@ -19563,7 +19563,7 @@ msgstr "Ausführung"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:16
|
||||
msgid "Executive Assistant"
|
||||
msgstr ""
|
||||
msgstr "Assistent:in der Geschäftsführung"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:23
|
||||
msgid "Executive Search"
|
||||
@@ -19575,7 +19575,7 @@ msgstr "Steuerbefreite Lieferungen"
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:5
|
||||
msgid "Exhibition"
|
||||
msgstr ""
|
||||
msgstr "Ausstellung"
|
||||
|
||||
#. Option for the 'Create Chart Of Accounts Based On' (Select) field in DocType
|
||||
#. 'Company'
|
||||
@@ -19590,7 +19590,7 @@ msgstr "Bestehendes Unternehmen"
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:1
|
||||
msgid "Existing Customer"
|
||||
msgstr ""
|
||||
msgstr "Bestehender Kunde"
|
||||
|
||||
#. Label of the exit (Tab Break) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
@@ -20367,7 +20367,7 @@ msgstr "Finanzbücher"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:17
|
||||
msgid "Finance Manager"
|
||||
msgstr ""
|
||||
msgstr "Finanzleitung"
|
||||
|
||||
#. Name of a report
|
||||
#: accounts/report/financial_ratios/financial_ratios.json
|
||||
@@ -20381,7 +20381,7 @@ msgstr "Finanzberichte"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:24
|
||||
msgid "Financial Services"
|
||||
msgstr ""
|
||||
msgstr "Finanzdienstleistungen"
|
||||
|
||||
#. Title of an Onboarding Step
|
||||
#. Label of a Card Break in the Financial Reports Workspace
|
||||
@@ -20799,7 +20799,7 @@ msgstr "Die folgenden Elemente {0} sind nicht als Element {1} markiert. Sie kön
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:25
|
||||
msgid "Food, Beverage & Tobacco"
|
||||
msgstr ""
|
||||
msgstr "Lebensmittel, Getränke und Tabakwaren"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -21022,12 +21022,12 @@ msgstr "Forum-URL"
|
||||
#. Title of an incoterm
|
||||
#: setup/doctype/incoterm/incoterms.csv:4
|
||||
msgid "Free Alongside Ship"
|
||||
msgstr ""
|
||||
msgstr "Frei Längsseite Schiff"
|
||||
|
||||
#. Title of an incoterm
|
||||
#: setup/doctype/incoterm/incoterms.csv:3
|
||||
msgid "Free Carrier"
|
||||
msgstr ""
|
||||
msgstr "Frei Frachtführer"
|
||||
|
||||
#. Label of the free_item (Link) field in DocType 'Pricing Rule'
|
||||
#. Label of the section_break_6 (Section Break) field in DocType 'Promotional
|
||||
@@ -21045,7 +21045,7 @@ msgstr ""
|
||||
#. Title of an incoterm
|
||||
#: setup/doctype/incoterm/incoterms.csv:5
|
||||
msgid "Free On Board"
|
||||
msgstr ""
|
||||
msgstr "Frei an Bord"
|
||||
|
||||
#: accounts/doctype/pricing_rule/pricing_rule.py:282
|
||||
msgid "Free item code is not selected"
|
||||
@@ -21305,7 +21305,7 @@ msgstr "Von-Datum kann später liegen als Bis-Datum"
|
||||
|
||||
#: crm/report/sales_pipeline_analytics/sales_pipeline_analytics.py:26
|
||||
msgid "From Date is mandatory"
|
||||
msgstr ""
|
||||
msgstr "Von-Datum ist obligatorisch"
|
||||
|
||||
#: accounts/report/customer_ledger_summary/customer_ledger_summary.py:21
|
||||
#: accounts/report/general_ledger/general_ledger.py:76
|
||||
@@ -22410,7 +22410,7 @@ msgstr "Grüße Abschnitt"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:26
|
||||
msgid "Grocery"
|
||||
msgstr ""
|
||||
msgstr "Lebensmittel"
|
||||
|
||||
#. Label of the gross_margin (Currency) field in DocType 'Project'
|
||||
#: projects/doctype/project/project.json
|
||||
@@ -22454,7 +22454,7 @@ msgstr "Bruttokaufbetrag"
|
||||
|
||||
#: assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py:371
|
||||
msgid "Gross Purchase Amount Too Low: {0} cannot be depreciated over {1} cycles with a frequency of {2} depreciations."
|
||||
msgstr ""
|
||||
msgstr "Bruttokaufbetrag zu niedrig: {0} kann nicht über {1} Zyklen mit einer Häufigkeit von {2} Abschreibungen abgeschrieben werden."
|
||||
|
||||
#: assets/doctype/asset/asset.py:313
|
||||
msgid "Gross Purchase Amount is mandatory"
|
||||
@@ -22748,16 +22748,16 @@ msgstr "Gibt es eine Standard-Nummernkreis für Chargen?"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:19
|
||||
msgid "Head of Marketing and Sales"
|
||||
msgstr ""
|
||||
msgstr "Leitung Marketing und Vertrieb"
|
||||
|
||||
#. Description of a DocType
|
||||
#: accounts/doctype/account/account.json
|
||||
msgid "Heads (or groups) against which Accounting Entries are made and balances are maintained."
|
||||
msgstr ""
|
||||
msgstr "Konten (oder Kontengruppen), unter denen Buchungen vorgenommen und Salden geführt werden."
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:27
|
||||
msgid "Health Care"
|
||||
msgstr ""
|
||||
msgstr "Gesundheitswesen"
|
||||
|
||||
#. Label of the health_details (Small Text) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
@@ -25100,7 +25100,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:29
|
||||
msgid "Investment Banking"
|
||||
msgstr ""
|
||||
msgstr "Investment-Banking"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:38
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:53
|
||||
@@ -29230,11 +29230,11 @@ msgstr "Verwaltung"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:20
|
||||
msgid "Manager"
|
||||
msgstr ""
|
||||
msgstr "Manager:in"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:21
|
||||
msgid "Managing Director"
|
||||
msgstr ""
|
||||
msgstr "Geschäftsleitung"
|
||||
|
||||
#. Label of the reqd (Check) field in DocType 'POS Field'
|
||||
#. Label of the reqd (Check) field in DocType 'Inventory Dimension'
|
||||
@@ -29666,11 +29666,11 @@ msgstr "Marketingkosten"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:22
|
||||
msgid "Marketing Manager"
|
||||
msgstr ""
|
||||
msgstr "Marketing-Manager:in"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:23
|
||||
msgid "Marketing Specialist"
|
||||
msgstr ""
|
||||
msgstr "Marketing-Spezialist:in"
|
||||
|
||||
#. Option for the 'Marital Status' (Select) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
@@ -30076,7 +30076,7 @@ msgstr "Maximaler Rechnungsbetrag"
|
||||
#. Label of the maximum_net_rate (Float) field in DocType 'Item Tax'
|
||||
#: stock/doctype/item_tax/item_tax.json
|
||||
msgid "Maximum Net Rate"
|
||||
msgstr "Maximaler Nettopreis"
|
||||
msgstr "Bis Nettopreis"
|
||||
|
||||
#. Label of the maximum_payment_amount (Currency) field in DocType 'Payment
|
||||
#. Reconciliation'
|
||||
@@ -30493,7 +30493,7 @@ msgstr "Mindestalter Interessent (in Tagen)"
|
||||
#. Label of the minimum_net_rate (Float) field in DocType 'Item Tax'
|
||||
#: stock/doctype/item_tax/item_tax.json
|
||||
msgid "Minimum Net Rate"
|
||||
msgstr "Mindestnettopreis"
|
||||
msgstr "Ab Nettopreis"
|
||||
|
||||
#. Label of the min_order_qty (Float) field in DocType 'Item'
|
||||
#: stock/doctype/item/item.json
|
||||
@@ -30987,7 +30987,7 @@ msgstr "Mehr Informationen"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:32
|
||||
msgid "Motion Picture & Video"
|
||||
msgstr ""
|
||||
msgstr "Film & Video"
|
||||
|
||||
#: manufacturing/doctype/plant_floor/stock_summary_template.html:58
|
||||
#: stock/dashboard/item_dashboard_list.html:52 stock/doctype/batch/batch.js:75
|
||||
@@ -31069,7 +31069,7 @@ msgstr "Mehrere Artikel können nicht als fertiger Artikel markiert werden"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:33
|
||||
msgid "Music"
|
||||
msgstr ""
|
||||
msgstr "Musik"
|
||||
|
||||
#. Label of the must_be_whole_number (Check) field in DocType 'UOM'
|
||||
#: manufacturing/doctype/work_order/work_order.py:998
|
||||
@@ -31705,7 +31705,7 @@ msgstr "Newsletter"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:34
|
||||
msgid "Newspaper Publishers"
|
||||
msgstr ""
|
||||
msgstr "Zeitungsverlage"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -32702,7 +32702,7 @@ msgstr "Laufende Jobkarten"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:35
|
||||
msgid "Online Auctions"
|
||||
msgstr ""
|
||||
msgstr "Online-Auktionen"
|
||||
|
||||
#. Description of the 'Default Advance Account' (Link) field in DocType
|
||||
#. 'Payment Reconciliation'
|
||||
@@ -35734,7 +35734,7 @@ msgstr "Ausstehende Verarbeitung"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:36
|
||||
msgid "Pension Funds"
|
||||
msgstr ""
|
||||
msgstr "Rentenfonds"
|
||||
|
||||
#. Option for the 'Evaluation Period' (Select) field in DocType 'Supplier
|
||||
#. Scorecard'
|
||||
@@ -35984,7 +35984,7 @@ msgstr "Arzneimittel"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:37
|
||||
msgid "Pharmaceuticals"
|
||||
msgstr ""
|
||||
msgstr "Pharmazeutika"
|
||||
|
||||
#. Option for the 'Type' (Select) field in DocType 'Mode of Payment'
|
||||
#. Option for the 'Payment Channel' (Select) field in DocType 'Payment Gateway
|
||||
@@ -38766,7 +38766,7 @@ msgstr "Produktanfrage"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:25
|
||||
msgid "Product Manager"
|
||||
msgstr ""
|
||||
msgstr "Produktmanager:in"
|
||||
|
||||
#. Label of the product_price_id (Data) field in DocType 'Subscription Plan'
|
||||
#: accounts/doctype/subscription_plan/subscription_plan.json
|
||||
@@ -39133,7 +39133,7 @@ msgstr "Projekt-ID"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:26
|
||||
msgid "Project Manager"
|
||||
msgstr ""
|
||||
msgstr "Projektmanager:in"
|
||||
|
||||
#. Label of the project_name (Data) field in DocType 'Sales Invoice Timesheet'
|
||||
#. Label of the project_name (Data) field in DocType 'Project'
|
||||
@@ -39425,7 +39425,7 @@ msgstr "Bereitstellung"
|
||||
|
||||
#: setup/doctype/company/company.py:447
|
||||
msgid "Provisional Account"
|
||||
msgstr ""
|
||||
msgstr "Vorläufiges Konto"
|
||||
|
||||
#. Label of the provisional_expense_account (Link) field in DocType 'Purchase
|
||||
#. Receipt Item'
|
||||
@@ -41357,7 +41357,7 @@ msgstr "Zinssatz (%) p.a."
|
||||
#: stock/doctype/delivery_note_item/delivery_note_item.json
|
||||
#: stock/doctype/purchase_receipt_item/purchase_receipt_item.json
|
||||
msgid "Rate of Stock UOM"
|
||||
msgstr ""
|
||||
msgstr "Einzelpreis der Lager-ME"
|
||||
|
||||
#. Label of the rate_or_discount (Select) field in DocType 'Pricing Rule'
|
||||
#. Label of the rate_or_discount (Data) field in DocType 'Pricing Rule Detail'
|
||||
@@ -41610,7 +41610,7 @@ msgstr "Ablesungen"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:40
|
||||
msgid "Real Estate"
|
||||
msgstr ""
|
||||
msgstr "Immobilien"
|
||||
|
||||
#: support/doctype/issue/issue.js:51
|
||||
msgid "Reason"
|
||||
@@ -41656,7 +41656,7 @@ msgstr ""
|
||||
|
||||
#: projects/doctype/project/project.js:136
|
||||
msgid "Recalculating Purchase Cost against this Project..."
|
||||
msgstr ""
|
||||
msgstr "Neuberechnung der Anschaffungskosten für dieses Projekt..."
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Asset'
|
||||
#. Option for the 'Purpose' (Select) field in DocType 'Asset Movement'
|
||||
@@ -43195,7 +43195,7 @@ msgstr "Forschung & Entwicklung"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:27
|
||||
msgid "Researcher"
|
||||
msgstr ""
|
||||
msgstr "Forscher:in"
|
||||
|
||||
#. Description of the 'Supplier Primary Address' (Link) field in DocType
|
||||
#. 'Supplier'
|
||||
@@ -43584,7 +43584,7 @@ msgstr "Auftrag fortsetzen"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:41
|
||||
msgid "Retail & Wholesale"
|
||||
msgstr ""
|
||||
msgstr "Einzel- und Großhandel"
|
||||
|
||||
#: setup/setup_wizard/data/sales_partner_type.txt:5
|
||||
msgid "Retailer"
|
||||
@@ -44364,7 +44364,7 @@ msgstr "Zeile {0}: Buchungssatz {1} betrifft nicht Konto {2} oder bereits mit ei
|
||||
|
||||
#: stock/doctype/item/item.py:348
|
||||
msgid "Row #{0}: Maximum Net Rate cannot be greater than Minimum Net Rate"
|
||||
msgstr ""
|
||||
msgstr "Zeile #{0}: Der Ab Nettopreis kann nicht größer sein als der Bis Nettopreis"
|
||||
|
||||
#: selling/doctype/sales_order/sales_order.py:557
|
||||
msgid "Row #{0}: Not allowed to change Supplier as Purchase Order already exists"
|
||||
@@ -44831,7 +44831,7 @@ msgstr "Zeile {0}: Artikel {1} muss ein Lagerartikel sein."
|
||||
|
||||
#: controllers/subcontracting_controller.py:103
|
||||
msgid "Row {0}: Item {1} must be a subcontracted item."
|
||||
msgstr ""
|
||||
msgstr "Zeile {0}: Artikel {1} muss ein an Dritte vergebener Artikel sein."
|
||||
|
||||
#: stock/doctype/delivery_note/delivery_note.py:742
|
||||
msgid "Row {0}: Packed Qty must be equal to {1} Qty."
|
||||
@@ -44863,7 +44863,7 @@ msgstr "Zeile {0}: Wenn es sich um eine Vorkasse-Buchung handelt, bitte \"Ist Vo
|
||||
|
||||
#: stock/doctype/packing_slip/packing_slip.py:140
|
||||
msgid "Row {0}: Please provide a valid Delivery Note Item or Packed Item reference."
|
||||
msgstr ""
|
||||
msgstr "Zeile {0}: Bitte geben Sie einen gültigen Lieferschein Artikel oder verpackten Artikel an."
|
||||
|
||||
#: controllers/subcontracting_controller.py:123
|
||||
msgid "Row {0}: Please select a BOM for Item {1}."
|
||||
@@ -44923,7 +44923,7 @@ msgstr "Zeile {0}: Unterauftragsartikel sind für den Rohstoff {1} obligatorisch
|
||||
|
||||
#: controllers/stock_controller.py:1048
|
||||
msgid "Row {0}: Target Warehouse is mandatory for internal transfers"
|
||||
msgstr ""
|
||||
msgstr "Zeile {0}: Ziellager ist für interne Transfers obligatorisch"
|
||||
|
||||
#: stock/doctype/stock_entry/stock_entry.py:427
|
||||
msgid "Row {0}: The item {1}, quantity must be positive number"
|
||||
@@ -45767,7 +45767,7 @@ msgstr "Übersicht über den Umsatz"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:28
|
||||
msgid "Sales Representative"
|
||||
msgstr ""
|
||||
msgstr "Vertriebsmitarbeiter:in"
|
||||
|
||||
#: accounts/report/gross_profit/gross_profit.py:797
|
||||
#: stock/doctype/delivery_note/delivery_note.js:218
|
||||
@@ -46350,7 +46350,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:29
|
||||
msgid "Secretary"
|
||||
msgstr ""
|
||||
msgstr "Sekretär:in"
|
||||
|
||||
#: accounts/report/tax_withholding_details/tax_withholding_details.py:172
|
||||
#: accounts/report/tds_computation_summary/tds_computation_summary.py:117
|
||||
@@ -46364,7 +46364,7 @@ msgstr "Gedeckte Kredite"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:42
|
||||
msgid "Securities & Commodity Exchanges"
|
||||
msgstr ""
|
||||
msgstr "Wertpapier- und Rohstoffbörsen"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:18
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:26
|
||||
@@ -46573,7 +46573,7 @@ msgstr "Lager auswählen ..."
|
||||
|
||||
#: manufacturing/doctype/production_plan/production_plan.js:438
|
||||
msgid "Select Warehouses to get Stock for Materials Planning"
|
||||
msgstr ""
|
||||
msgstr "Wählen Sie Lager aus, um Bestände für die Materialplanung zu erhalten"
|
||||
|
||||
#: public/js/communication.js:80
|
||||
msgid "Select a Company"
|
||||
@@ -46613,7 +46613,7 @@ msgstr "Wählen Sie ein Konto aus, das in der Kontowährung gedruckt werden soll
|
||||
|
||||
#: selling/page/point_of_sale/pos_past_order_summary.js:18
|
||||
msgid "Select an invoice to load summary data"
|
||||
msgstr ""
|
||||
msgstr "Wählen Sie eine Rechnung aus, um die Zusammenfassung zu laden"
|
||||
|
||||
#: selling/doctype/quotation/quotation.js:342
|
||||
msgid "Select an item from each set to be used in the Sales Order."
|
||||
@@ -46864,7 +46864,7 @@ msgstr "An primären Kontakt senden"
|
||||
#. Description of a DocType
|
||||
#: setup/doctype/email_digest/email_digest.json
|
||||
msgid "Send regular summary reports via Email."
|
||||
msgstr ""
|
||||
msgstr "Regelmäßige Zusammenfassungen per E-Mail senden."
|
||||
|
||||
#. Option for the 'Purpose' (Select) field in DocType 'Stock Entry'
|
||||
#. Option for the 'Purpose' (Select) field in DocType 'Stock Entry Type'
|
||||
@@ -47242,7 +47242,7 @@ msgstr "Serien- und Chargenbündel {0} wird bereits in {1} {2} verwendet."
|
||||
#. 'Subcontracting Receipt Item'
|
||||
#: subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json
|
||||
msgid "Serial and Batch Details"
|
||||
msgstr ""
|
||||
msgstr "Serien- und Chargendetails"
|
||||
|
||||
#. Name of a DocType
|
||||
#: stock/doctype/serial_and_batch_entry/serial_and_batch_entry.json
|
||||
@@ -48016,7 +48016,7 @@ msgstr "Haltbarkeit in Tagen"
|
||||
|
||||
#: stock/doctype/batch/batch.py:191
|
||||
msgid "Shelf Life in Days"
|
||||
msgstr ""
|
||||
msgstr "Haltbarkeitsdauer in Tagen"
|
||||
|
||||
#. Label of the shift (Link) field in DocType 'Depreciation Schedule'
|
||||
#: assets/doctype/asset/asset.js:298
|
||||
@@ -48327,7 +48327,7 @@ msgstr "Kumulativen Betrag anzeigen"
|
||||
|
||||
#: stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.js:16
|
||||
msgid "Show Disabled Warehouses"
|
||||
msgstr ""
|
||||
msgstr "Deaktivierte Lager anzeigen"
|
||||
|
||||
#: erpnext_integrations/doctype/tally_migration/tally_migration.js:306
|
||||
msgid "Show Document"
|
||||
@@ -48347,7 +48347,7 @@ msgstr "Zukünftige Zahlungen anzeigen"
|
||||
|
||||
#: accounts/report/accounts_receivable_summary/accounts_receivable_summary.js:142
|
||||
msgid "Show GL Balance"
|
||||
msgstr ""
|
||||
msgstr "Hauptbuchsaldo anzeigen"
|
||||
|
||||
#. Label of the show_in_website (Check) field in DocType 'Sales Partner'
|
||||
#: setup/doctype/sales_partner/sales_partner.json
|
||||
@@ -48407,7 +48407,7 @@ msgstr "zeigen Operationen"
|
||||
#. Label of the show_pay_button (Check) field in DocType 'Buying Settings'
|
||||
#: buying/doctype/buying_settings/buying_settings.json
|
||||
msgid "Show Pay Button in Purchase Order Portal"
|
||||
msgstr ""
|
||||
msgstr "Schaltfläche „Bezahlen“ im Bestellportal anzeigen"
|
||||
|
||||
#: accounts/report/sales_payment_summary/sales_payment_summary.js:40
|
||||
msgid "Show Payment Details"
|
||||
@@ -48446,7 +48446,7 @@ msgstr "Alterungsdaten anzeigen"
|
||||
#. Settings'
|
||||
#: accounts/doctype/accounts_settings/accounts_settings.json
|
||||
msgid "Show Taxes as Table in Print"
|
||||
msgstr ""
|
||||
msgstr "Steuern als Tabelle im Druck anzeigen"
|
||||
|
||||
#: accounts/doctype/bank_statement_import/bank_statement_import.js:480
|
||||
#: erpnext_integrations/doctype/tally_migration/tally_migration.js:296
|
||||
@@ -48477,7 +48477,7 @@ msgstr "In der Website anzeigen"
|
||||
|
||||
#: accounts/report/trial_balance/trial_balance.js:110
|
||||
msgid "Show net values in opening and closing columns"
|
||||
msgstr ""
|
||||
msgstr "Nettowerte in Eröffnungs- und Abschlussspalten anzeigen"
|
||||
|
||||
#: accounts/report/sales_payment_summary/sales_payment_summary.js:35
|
||||
msgid "Show only POS"
|
||||
@@ -48497,7 +48497,7 @@ msgstr "Gewinn- und Verlustrechnung für nicht geschlossenes Finanzjahr zeigen."
|
||||
|
||||
#: accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js:96
|
||||
msgid "Show with upcoming revenue/expense"
|
||||
msgstr ""
|
||||
msgstr "Mit kommenden Einnahmen/Ausgaben anzeigen"
|
||||
|
||||
#: accounts/report/consolidated_financial_statement/consolidated_financial_statement.js:137
|
||||
#: accounts/report/profitability_analysis/profitability_analysis.js:71
|
||||
@@ -48679,7 +48679,7 @@ msgstr "Glättungskonstante"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:44
|
||||
msgid "Soap & Detergent"
|
||||
msgstr ""
|
||||
msgstr "Seife & Waschmittel"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:32
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:45
|
||||
@@ -48689,7 +48689,7 @@ msgstr "Software"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:30
|
||||
msgid "Software Developer"
|
||||
msgstr ""
|
||||
msgstr "Software-Entwickler:in"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Asset'
|
||||
#: assets/doctype/asset/asset.json assets/doctype/asset/asset_list.js:9
|
||||
@@ -48702,7 +48702,7 @@ msgstr "Verkauft von"
|
||||
|
||||
#: www/book_appointment/index.js:248
|
||||
msgid "Something went wrong please try again"
|
||||
msgstr ""
|
||||
msgstr "Etwas ist schief gelaufen, bitte versuchen Sie es erneut"
|
||||
|
||||
#: accounts/doctype/pricing_rule/utils.py:735
|
||||
msgid "Sorry, this coupon code is no longer valid"
|
||||
@@ -48861,12 +48861,12 @@ msgstr "Vom Lieferanten bezogen"
|
||||
#. Name of a DocType
|
||||
#: accounts/doctype/south_africa_vat_account/south_africa_vat_account.json
|
||||
msgid "South Africa VAT Account"
|
||||
msgstr ""
|
||||
msgstr "Südafrika Mehrwertsteuer-Konto"
|
||||
|
||||
#. Name of a DocType
|
||||
#: regional/doctype/south_africa_vat_settings/south_africa_vat_settings.json
|
||||
msgid "South Africa VAT Settings"
|
||||
msgstr ""
|
||||
msgstr "Südafrika Mehrwertsteuer-Einstellungen"
|
||||
|
||||
#. Label of the spacer (Data) field in DocType 'Dunning'
|
||||
#: accounts/doctype/dunning/dunning.json
|
||||
@@ -48876,12 +48876,12 @@ msgstr "Abstandshalter"
|
||||
#. Description of a DocType
|
||||
#: setup/doctype/currency_exchange/currency_exchange.json
|
||||
msgid "Specify Exchange Rate to convert one currency into another"
|
||||
msgstr ""
|
||||
msgstr "Geben Sie den Wechselkurs an, um eine Währung in eine andere umzurechnen"
|
||||
|
||||
#. Description of a DocType
|
||||
#: accounts/doctype/shipping_rule/shipping_rule.json
|
||||
msgid "Specify conditions to calculate shipping amount"
|
||||
msgstr ""
|
||||
msgstr "Geben Sie Bedingungen an, um den Versandbetrag zu berechnen"
|
||||
|
||||
#: assets/doctype/asset/asset.js:552 stock/doctype/batch/batch.js:75
|
||||
#: stock/doctype/batch/batch.js:167 support/doctype/issue/issue.js:112
|
||||
@@ -48925,7 +48925,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:46
|
||||
msgid "Sports"
|
||||
msgstr ""
|
||||
msgstr "Sport"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -49096,7 +49096,7 @@ msgstr "Startdatum darf nicht vor dem aktuellen Datum liegen"
|
||||
|
||||
#: setup/doctype/transaction_deletion_record/transaction_deletion_record.js:21
|
||||
msgid "Start Deletion"
|
||||
msgstr ""
|
||||
msgstr "Löschen starten"
|
||||
|
||||
#: accounts/doctype/bank_statement_import/bank_statement_import.js:115
|
||||
msgid "Start Import"
|
||||
@@ -49129,7 +49129,7 @@ msgstr "Startzeit"
|
||||
|
||||
#: support/doctype/service_level_agreement/service_level_agreement.py:129
|
||||
msgid "Start Time can't be greater than or equal to End Time for {0}."
|
||||
msgstr ""
|
||||
msgstr "Die Startzeit kann nicht größer oder gleich der Endzeit für {0} sein."
|
||||
|
||||
#: accounts/report/consolidated_financial_statement/consolidated_financial_statement.js:56
|
||||
#: accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js:56
|
||||
@@ -49168,7 +49168,7 @@ msgstr "Startzeit"
|
||||
|
||||
#: utilities/bulk_transaction.py:21
|
||||
msgid "Started a background job to create {1} {0}"
|
||||
msgstr ""
|
||||
msgstr "Hintergrundjob zum Erstellen von {1} {0} gestartet"
|
||||
|
||||
#. Label of the date_dist_from_left_edge (Float) field in DocType 'Cheque Print
|
||||
#. Template'
|
||||
@@ -49462,7 +49462,7 @@ msgstr "Status muss einer aus {0} sein"
|
||||
|
||||
#: stock/doctype/quality_inspection/quality_inspection.py:183
|
||||
msgid "Status set to rejected as there are one or more rejected readings."
|
||||
msgstr ""
|
||||
msgstr "Der Status wurde auf abgelehnt gesetzt, da es einen oder mehrere abgelehnte Messwerte gibt."
|
||||
|
||||
#. Description of the 'Supplier Details' (Text) field in DocType 'Supplier'
|
||||
#: buying/doctype/supplier/supplier.json
|
||||
@@ -49548,7 +49548,7 @@ msgstr ""
|
||||
#. Label of the stock_consumption (Check) field in DocType 'Asset Repair'
|
||||
#: assets/doctype/asset_repair/asset_repair.json
|
||||
msgid "Stock Consumed During Repair"
|
||||
msgstr ""
|
||||
msgstr "Während der Reparatur verbrauchter Bestand"
|
||||
|
||||
#. Label of the stock_consumption_details_section (Section Break) field in
|
||||
#. DocType 'Asset Repair'
|
||||
@@ -49616,7 +49616,7 @@ msgstr "Lagerbuchung {0} erstellt"
|
||||
|
||||
#: manufacturing/doctype/job_card/job_card.py:1261
|
||||
msgid "Stock Entry {0} has created"
|
||||
msgstr ""
|
||||
msgstr "Lagerbuchung {0} erstellt"
|
||||
|
||||
#: accounts/doctype/journal_entry/journal_entry.py:1211
|
||||
msgid "Stock Entry {0} is not submitted"
|
||||
@@ -49834,15 +49834,15 @@ msgstr ""
|
||||
#: stock/doctype/stock_settings/stock_settings.py:210
|
||||
#: stock/doctype/stock_settings/stock_settings.py:224
|
||||
msgid "Stock Reservation"
|
||||
msgstr ""
|
||||
msgstr "Bestandsreservierung"
|
||||
|
||||
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1135
|
||||
msgid "Stock Reservation Entries Cancelled"
|
||||
msgstr ""
|
||||
msgstr "Bestandsreservierungen storniert"
|
||||
|
||||
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1087
|
||||
msgid "Stock Reservation Entries Created"
|
||||
msgstr ""
|
||||
msgstr "Bestandsreservierungen erstellt"
|
||||
|
||||
#. Name of a DocType
|
||||
#: selling/doctype/sales_order/sales_order.js:462
|
||||
@@ -49851,15 +49851,15 @@ msgstr ""
|
||||
#: stock/report/reserved_stock/reserved_stock.js:53
|
||||
#: stock/report/reserved_stock/reserved_stock.py:171
|
||||
msgid "Stock Reservation Entry"
|
||||
msgstr ""
|
||||
msgstr "Bestandsreservierungseintrag"
|
||||
|
||||
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:425
|
||||
msgid "Stock Reservation Entry cannot be updated as it has been delivered."
|
||||
msgstr ""
|
||||
msgstr "Der Bestandsreservierungseintrag kann nicht aktualisiert werden, da er bereits geliefert wurde."
|
||||
|
||||
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:419
|
||||
msgid "Stock Reservation Entry created against a Pick List cannot be updated. If you need to make changes, we recommend canceling the existing entry and creating a new one."
|
||||
msgstr ""
|
||||
msgstr "Ein anhand einer Kommissionierliste erstellter Bestandsreservierungseintrag kann nicht aktualisiert werden. Wenn Sie Änderungen vornehmen müssen, empfehlen wir, den vorhandenen Eintrag zu stornieren und einen neuen zu erstellen."
|
||||
|
||||
#: stock/doctype/delivery_note/delivery_note.py:695
|
||||
msgid "Stock Reservation Warehouse Mismatch"
|
||||
@@ -49867,14 +49867,14 @@ msgstr ""
|
||||
|
||||
#: stock/doctype/stock_reservation_entry/stock_reservation_entry.py:509
|
||||
msgid "Stock Reservation can only be created against {0}."
|
||||
msgstr ""
|
||||
msgstr "Bestandsreservierungen können nur gegen {0} erstellt werden."
|
||||
|
||||
#. Label of the stock_reserved_qty (Float) field in DocType 'Sales Order Item'
|
||||
#. Label of the stock_reserved_qty (Float) field in DocType 'Pick List Item'
|
||||
#: selling/doctype/sales_order_item/sales_order_item.json
|
||||
#: stock/doctype/pick_list_item/pick_list_item.json
|
||||
msgid "Stock Reserved Qty (in Stock UOM)"
|
||||
msgstr ""
|
||||
msgstr "Reservierter Bestand (in Lager-ME)"
|
||||
|
||||
#: stock/doctype/stock_entry/stock_entry.py:1583
|
||||
msgid "Stock Return"
|
||||
@@ -50775,7 +50775,7 @@ msgstr "Sonntag"
|
||||
|
||||
#: buying/report/subcontract_order_summary/subcontract_order_summary.py:145
|
||||
msgid "Supplied Item"
|
||||
msgstr ""
|
||||
msgstr "Gelieferter Artikel"
|
||||
|
||||
#. Label of the supplied_items (Table) field in DocType 'Purchase Invoice'
|
||||
#. Label of the supplied_items (Table) field in DocType 'Purchase Order'
|
||||
@@ -52404,11 +52404,11 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:47
|
||||
msgid "Technology"
|
||||
msgstr ""
|
||||
msgstr "Technologie"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:48
|
||||
msgid "Telecommunications"
|
||||
msgstr ""
|
||||
msgstr "Telekommunikation"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:69
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:93
|
||||
@@ -52422,7 +52422,7 @@ msgstr "Telefonie Anrufart"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:49
|
||||
msgid "Television"
|
||||
msgstr ""
|
||||
msgstr "Fernsehen"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Task'
|
||||
#. Label of the template (Link) field in DocType 'Quality Feedback'
|
||||
@@ -53896,7 +53896,7 @@ msgstr "Bis Datum darf nicht kleiner sein als Von Datum"
|
||||
|
||||
#: crm/report/sales_pipeline_analytics/sales_pipeline_analytics.py:29
|
||||
msgid "To Date is mandatory"
|
||||
msgstr ""
|
||||
msgstr "Bis Datum ist obligatorisch"
|
||||
|
||||
#: buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.py:11
|
||||
#: buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.py:11
|
||||
@@ -53934,7 +53934,7 @@ msgstr "Auszuliefern und Abzurechnen"
|
||||
#. Label of the to_delivery_date (Date) field in DocType 'Production Plan'
|
||||
#: manufacturing/doctype/production_plan/production_plan.json
|
||||
msgid "To Delivery Date"
|
||||
msgstr ""
|
||||
msgstr "Bis Liefertermin"
|
||||
|
||||
#. Label of the to_doctype (Link) field in DocType 'Bulk Transaction Log
|
||||
#. Detail'
|
||||
@@ -53944,7 +53944,7 @@ msgstr ""
|
||||
|
||||
#: selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js:83
|
||||
msgid "To Due Date"
|
||||
msgstr ""
|
||||
msgstr "Bis Fälligkeitsdatum"
|
||||
|
||||
#. Label of the to_employee (Link) field in DocType 'Asset Movement Item'
|
||||
#: assets/doctype/asset_movement_item/asset_movement_item.json
|
||||
@@ -53995,7 +53995,7 @@ msgstr "Zu bezahlen"
|
||||
#: accounts/doctype/payment_reconciliation/payment_reconciliation.json
|
||||
#: accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.json
|
||||
msgid "To Payment Date"
|
||||
msgstr ""
|
||||
msgstr "Bis Zahlungsdatum"
|
||||
|
||||
#: manufacturing/report/job_card_summary/job_card_summary.js:43
|
||||
#: manufacturing/report/work_order_summary/work_order_summary.js:29
|
||||
@@ -54025,7 +54025,7 @@ msgstr "Zu empfangen und abzurechnen"
|
||||
#. Tool'
|
||||
#: accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.json
|
||||
msgid "To Reference Date"
|
||||
msgstr ""
|
||||
msgstr "Bis Stichtag"
|
||||
|
||||
#. Label of the to_rename (Check) field in DocType 'GL Entry'
|
||||
#. Label of the to_rename (Check) field in DocType 'Stock Ledger Entry'
|
||||
@@ -55398,7 +55398,7 @@ msgstr "Transportbeleg Nr"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:50
|
||||
msgid "Transportation"
|
||||
msgstr ""
|
||||
msgstr "Transportwesen"
|
||||
|
||||
#. Label of the transporter (Link) field in DocType 'Driver'
|
||||
#. Label of the transporter (Link) field in DocType 'Delivery Note'
|
||||
@@ -57117,7 +57117,7 @@ msgstr "Herstellername"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:51
|
||||
msgid "Venture Capital"
|
||||
msgstr ""
|
||||
msgstr "Risikokapital"
|
||||
|
||||
#: www/book_appointment/verify/index.html:15
|
||||
msgid "Verification failed please check the link"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: info@erpnext.com\n"
|
||||
"POT-Creation-Date: 2024-08-18 09:35+0000\n"
|
||||
"PO-Revision-Date: 2024-08-19 12:45\n"
|
||||
"PO-Revision-Date: 2024-08-25 15:03\n"
|
||||
"Last-Translator: info@erpnext.com\n"
|
||||
"Language-Team: Spanish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -731,13 +731,13 @@ msgstr "(C) Cant. total en cola"
|
||||
#: stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py:210
|
||||
#: stock/report/stock_ledger_variance/stock_ledger_variance.py:134
|
||||
msgid "(D) Balance Stock Value"
|
||||
msgstr ""
|
||||
msgstr "(D) Valor del balance de las existencias"
|
||||
|
||||
#: stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.py:199
|
||||
#: stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py:215
|
||||
#: stock/report/stock_ledger_variance/stock_ledger_variance.py:139
|
||||
msgid "(E) Balance Stock Value in Queue"
|
||||
msgstr ""
|
||||
msgstr "(E) Valor del balance de las existencias en cola"
|
||||
|
||||
#: stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py:225
|
||||
#: stock/report/stock_ledger_variance/stock_ledger_variance.py:149
|
||||
@@ -1794,7 +1794,7 @@ msgstr "Cuenta: {0} con divisa: {1} no puede ser seleccionada"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:1
|
||||
msgid "Accountant"
|
||||
msgstr ""
|
||||
msgstr "Contador"
|
||||
|
||||
#. Label of the section_break_19 (Section Break) field in DocType 'POS Profile'
|
||||
#. Label of the accounting (Section Break) field in DocType 'Purchase Invoice
|
||||
@@ -3550,7 +3550,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:2
|
||||
msgid "Administrative Assistant"
|
||||
msgstr ""
|
||||
msgstr "Asistente Administrativo"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:54
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:79
|
||||
@@ -3559,7 +3559,7 @@ msgstr "GASTOS DE ADMINISTRACIÓN"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:3
|
||||
msgid "Administrative Officer"
|
||||
msgstr ""
|
||||
msgstr "Oficial Administrativo"
|
||||
|
||||
#. Name of a role
|
||||
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
|
||||
@@ -3676,15 +3676,15 @@ msgstr "Anticipos"
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:3
|
||||
msgid "Advertisement"
|
||||
msgstr ""
|
||||
msgstr "Publicidad"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:2
|
||||
msgid "Advertising"
|
||||
msgstr ""
|
||||
msgstr "Publicidad"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:3
|
||||
msgid "Aerospace"
|
||||
msgstr ""
|
||||
msgstr "Aeroespacial"
|
||||
|
||||
#. Label of the affected_transactions (Code) field in DocType 'Repost Item
|
||||
#. Valuation'
|
||||
@@ -3911,7 +3911,7 @@ msgstr "Agenda"
|
||||
|
||||
#: setup/setup_wizard/data/sales_partner_type.txt:4
|
||||
msgid "Agent"
|
||||
msgstr ""
|
||||
msgstr "Agente"
|
||||
|
||||
#. Label of the agent_busy_message (Data) field in DocType 'Incoming Call
|
||||
#. Settings'
|
||||
@@ -3956,7 +3956,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:4
|
||||
msgid "Agriculture"
|
||||
msgstr ""
|
||||
msgstr "Agricultura"
|
||||
|
||||
#. Name of a role
|
||||
#: assets/doctype/location/location.json
|
||||
@@ -3970,7 +3970,7 @@ msgstr "Usuario de Agricultura"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:5
|
||||
msgid "Airline"
|
||||
msgstr ""
|
||||
msgstr "Aerolínea"
|
||||
|
||||
#. Label of the algorithm (Select) field in DocType 'Bisect Accounting
|
||||
#. Statements'
|
||||
@@ -5134,7 +5134,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:4
|
||||
msgid "Analyst"
|
||||
msgstr ""
|
||||
msgstr "Analista"
|
||||
|
||||
#: accounts/doctype/budget/budget.py:235
|
||||
msgid "Annual"
|
||||
@@ -5184,7 +5184,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:6
|
||||
msgid "Apparel & Accessories"
|
||||
msgstr ""
|
||||
msgstr "Vestimenta & Accesorios"
|
||||
|
||||
#. Label of the applicable_charges (Currency) field in DocType 'Landed Cost
|
||||
#. Item'
|
||||
@@ -5454,7 +5454,7 @@ msgstr "Aplicar Monto de Retención de Impuestos"
|
||||
#. Label of the apply_tds (Check) field in DocType 'Journal Entry'
|
||||
#: accounts/doctype/journal_entry/journal_entry.json
|
||||
msgid "Apply Tax Withholding Amount "
|
||||
msgstr ""
|
||||
msgstr "Aplicar Monto de Retención de Impuestos "
|
||||
|
||||
#. Label of the apply_restriction_on_values (Check) field in DocType
|
||||
#. 'Accounting Dimension Filter'
|
||||
@@ -6204,7 +6204,7 @@ msgstr "Condiciones de asignación"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:5
|
||||
msgid "Associate"
|
||||
msgstr ""
|
||||
msgstr "Asociado"
|
||||
|
||||
#: stock/doctype/pick_list/pick_list.py:98
|
||||
msgid "At Row #{0}: The picked quantity {1} for the item {2} is greater than available stock {3} for the batch {4} in the warehouse {5}."
|
||||
@@ -8253,7 +8253,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:9
|
||||
msgid "Biotechnology"
|
||||
msgstr ""
|
||||
msgstr "Biotecnología"
|
||||
|
||||
#. Name of a DocType
|
||||
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
|
||||
@@ -8598,11 +8598,11 @@ msgstr "Desglose"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:10
|
||||
msgid "Broadcasting"
|
||||
msgstr ""
|
||||
msgstr "Difusión"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:11
|
||||
msgid "Brokerage"
|
||||
msgstr ""
|
||||
msgstr "Corretaje"
|
||||
|
||||
#: manufacturing/doctype/bom/bom.js:144
|
||||
msgid "Browse BOM"
|
||||
@@ -8761,11 +8761,11 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:6
|
||||
msgid "Business Analyst"
|
||||
msgstr ""
|
||||
msgstr "Analista de Negocios"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:7
|
||||
msgid "Business Development Manager"
|
||||
msgstr ""
|
||||
msgstr "Gerente de Desarrollo de Negocios"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Call Log'
|
||||
#: telephony/doctype/call_log/call_log.json
|
||||
@@ -10100,7 +10100,7 @@ msgstr "Realizar pedido / Enviar pedido / Nuevo pedido"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:12
|
||||
msgid "Chemical"
|
||||
msgstr ""
|
||||
msgstr "Química"
|
||||
|
||||
#. Option for the 'Salary Mode' (Select) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
@@ -10161,19 +10161,19 @@ msgstr "Cheques y Depósitos liquidados de forma incorrecta"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:9
|
||||
msgid "Chief Executive Officer"
|
||||
msgstr ""
|
||||
msgstr "Director Ejecutivo"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:10
|
||||
msgid "Chief Financial Officer"
|
||||
msgstr ""
|
||||
msgstr "Director Financiero"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:11
|
||||
msgid "Chief Operating Officer"
|
||||
msgstr ""
|
||||
msgstr "Director de Operaciones"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:12
|
||||
msgid "Chief Technology Officer"
|
||||
msgstr ""
|
||||
msgstr "Director de Tecnología"
|
||||
|
||||
#. Label of the child_docname (Data) field in DocType 'Pricing Rule Detail'
|
||||
#: accounts/doctype/pricing_rule_detail/pricing_rule_detail.json
|
||||
@@ -10496,7 +10496,7 @@ msgstr "Código"
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:4
|
||||
msgid "Cold Calling"
|
||||
msgstr ""
|
||||
msgstr "Llamada en frío"
|
||||
|
||||
#: public/js/setup_wizard.js:190
|
||||
msgid "Collapse All"
|
||||
@@ -11729,7 +11729,7 @@ msgstr "Consultor"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:14
|
||||
msgid "Consulting"
|
||||
msgstr ""
|
||||
msgstr "Consultoría"
|
||||
|
||||
#: setup/setup_wizard/operations/install_fixtures.py:64
|
||||
msgid "Consumable"
|
||||
@@ -11817,7 +11817,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:15
|
||||
msgid "Consumer Products"
|
||||
msgstr ""
|
||||
msgstr "Productos de consumo"
|
||||
|
||||
#: stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py:175
|
||||
#: stock/report/stock_ledger_variance/stock_ledger_variance.py:99
|
||||
@@ -12315,7 +12315,7 @@ msgstr "Correctivo / preventivo"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:16
|
||||
msgid "Cosmetics"
|
||||
msgstr ""
|
||||
msgstr "Cosméticos"
|
||||
|
||||
#. Label of the cost (Currency) field in DocType 'Subscription Plan'
|
||||
#: accounts/doctype/subscription_plan/subscription_plan.json
|
||||
@@ -14573,7 +14573,7 @@ msgstr "Servicio al cliente"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:13
|
||||
msgid "Customer Service Representative"
|
||||
msgstr ""
|
||||
msgstr "Representante de Servicio al Cliente"
|
||||
|
||||
#. Label of the customer_territory (Link) field in DocType 'Loyalty Program'
|
||||
#: accounts/doctype/loyalty_program/loyalty_program.json
|
||||
@@ -15069,7 +15069,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/sales_partner_type.txt:3
|
||||
msgid "Dealer"
|
||||
msgstr ""
|
||||
msgstr "Distribuidor"
|
||||
|
||||
#: templates/emails/confirm_appointment.html:1
|
||||
msgid "Dear"
|
||||
@@ -15774,7 +15774,7 @@ msgstr "Predeterminados"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:17
|
||||
msgid "Defense"
|
||||
msgstr ""
|
||||
msgstr "Defensa"
|
||||
|
||||
#. Label of the deferred_accounting_section (Section Break) field in DocType
|
||||
#. 'Item'
|
||||
@@ -16256,7 +16256,7 @@ msgstr "Departamento"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:18
|
||||
msgid "Department Stores"
|
||||
msgstr ""
|
||||
msgstr "Tiendas por Departamento"
|
||||
|
||||
#. Label of the departure_time (Datetime) field in DocType 'Delivery Trip'
|
||||
#: stock/doctype/delivery_trip/delivery_trip.json
|
||||
@@ -16741,7 +16741,7 @@ msgstr "Puesto"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:14
|
||||
msgid "Designer"
|
||||
msgstr ""
|
||||
msgstr "Diseñador"
|
||||
|
||||
#. Name of a role
|
||||
#: crm/doctype/lead/lead.json projects/doctype/project/project.json
|
||||
@@ -18300,7 +18300,7 @@ msgstr "Registro Electrónico de Facturas"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:20
|
||||
msgid "Electronics"
|
||||
msgstr ""
|
||||
msgstr "Electrónica"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -18906,11 +18906,11 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:21
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
msgstr "Energía"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:15
|
||||
msgid "Engineer"
|
||||
msgstr ""
|
||||
msgstr "Ingeniero"
|
||||
|
||||
#: manufacturing/report/bom_stock_report/bom_stock_report.html:13
|
||||
#: manufacturing/report/bom_stock_report/bom_stock_report.html:23
|
||||
@@ -19037,7 +19037,7 @@ msgstr "Ingrese {0} monto."
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:22
|
||||
msgid "Entertainment & Leisure"
|
||||
msgstr ""
|
||||
msgstr "Entretenimiento y Ocio"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:57
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:82
|
||||
@@ -19395,11 +19395,11 @@ msgstr "Ejecución"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:16
|
||||
msgid "Executive Assistant"
|
||||
msgstr ""
|
||||
msgstr "Asistente Ejecutivo"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:23
|
||||
msgid "Executive Search"
|
||||
msgstr ""
|
||||
msgstr "Búsqueda de Ejecutivo"
|
||||
|
||||
#: regional/report/uae_vat_201/uae_vat_201.py:67
|
||||
msgid "Exempt Supplies"
|
||||
@@ -19407,7 +19407,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:5
|
||||
msgid "Exhibition"
|
||||
msgstr ""
|
||||
msgstr "Exposición"
|
||||
|
||||
#. Option for the 'Create Chart Of Accounts Based On' (Select) field in DocType
|
||||
#. 'Company'
|
||||
@@ -19422,7 +19422,7 @@ msgstr "Compañía existente"
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:1
|
||||
msgid "Existing Customer"
|
||||
msgstr ""
|
||||
msgstr "Cliente Existente"
|
||||
|
||||
#. Label of the exit (Tab Break) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
@@ -20199,7 +20199,7 @@ msgstr "Libros de Finanzas"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:17
|
||||
msgid "Finance Manager"
|
||||
msgstr ""
|
||||
msgstr "Gerente de Finanzas"
|
||||
|
||||
#. Name of a report
|
||||
#: accounts/report/financial_ratios/financial_ratios.json
|
||||
@@ -20213,7 +20213,7 @@ msgstr "Informes Financieros"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:24
|
||||
msgid "Financial Services"
|
||||
msgstr ""
|
||||
msgstr "Servicios Financieros"
|
||||
|
||||
#. Title of an Onboarding Step
|
||||
#. Label of a Card Break in the Financial Reports Workspace
|
||||
@@ -20631,7 +20631,7 @@ msgstr "Los siguientes elementos {0} no están marcados como {1} elemento. Puede
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:25
|
||||
msgid "Food, Beverage & Tobacco"
|
||||
msgstr ""
|
||||
msgstr "Alimentación, bebidas y tabaco"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -22242,7 +22242,7 @@ msgstr "Sección de saludos"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:26
|
||||
msgid "Grocery"
|
||||
msgstr ""
|
||||
msgstr "Tienda de comestibles"
|
||||
|
||||
#. Label of the gross_margin (Currency) field in DocType 'Project'
|
||||
#: projects/doctype/project/project.json
|
||||
@@ -22580,7 +22580,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:19
|
||||
msgid "Head of Marketing and Sales"
|
||||
msgstr ""
|
||||
msgstr "Jefe de Marketing y Ventas"
|
||||
|
||||
#. Description of a DocType
|
||||
#: accounts/doctype/account/account.json
|
||||
@@ -22589,7 +22589,7 @@ msgstr "Encabezados (o grupos) contra los cuales se realizan los Asientos Contab
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:27
|
||||
msgid "Health Care"
|
||||
msgstr ""
|
||||
msgstr "Cuidados de salud"
|
||||
|
||||
#. Label of the health_details (Small Text) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
@@ -23531,7 +23531,7 @@ msgstr "Vista de Imagen"
|
||||
|
||||
#: setup/setup_wizard/data/sales_partner_type.txt:6
|
||||
msgid "Implementation Partner"
|
||||
msgstr ""
|
||||
msgstr "Socio de Implementación"
|
||||
|
||||
#: accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:132
|
||||
msgid "Import"
|
||||
@@ -24685,7 +24685,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:28
|
||||
msgid "Internet Publishing"
|
||||
msgstr ""
|
||||
msgstr "Publicación en Internet"
|
||||
|
||||
#. Label of the introduction (Text) field in DocType 'Sales Partner'
|
||||
#: setup/doctype/sales_partner/sales_partner.json
|
||||
@@ -24931,7 +24931,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:29
|
||||
msgid "Investment Banking"
|
||||
msgstr ""
|
||||
msgstr "Banca de Inversión"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:38
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:53
|
||||
@@ -29064,7 +29064,7 @@ msgstr "Administrador"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:21
|
||||
msgid "Managing Director"
|
||||
msgstr ""
|
||||
msgstr "Director General"
|
||||
|
||||
#. Label of the reqd (Check) field in DocType 'POS Field'
|
||||
#. Label of the reqd (Check) field in DocType 'Inventory Dimension'
|
||||
@@ -29496,11 +29496,11 @@ msgstr "Gastos de Publicidad"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:22
|
||||
msgid "Marketing Manager"
|
||||
msgstr ""
|
||||
msgstr "Gerente de Marketing"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:23
|
||||
msgid "Marketing Specialist"
|
||||
msgstr ""
|
||||
msgstr "Especialista en Marketing"
|
||||
|
||||
#. Option for the 'Marital Status' (Select) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
@@ -29514,7 +29514,7 @@ msgstr "Máscara"
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:7
|
||||
msgid "Mass Mailing"
|
||||
msgstr ""
|
||||
msgstr "Envío masivo"
|
||||
|
||||
#: manufacturing/doctype/workstation/workstation_dashboard.py:8
|
||||
msgid "Master"
|
||||
@@ -30817,7 +30817,7 @@ msgstr "Más información"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:32
|
||||
msgid "Motion Picture & Video"
|
||||
msgstr ""
|
||||
msgstr "Películas y vídeos"
|
||||
|
||||
#: manufacturing/doctype/plant_floor/stock_summary_template.html:58
|
||||
#: stock/dashboard/item_dashboard_list.html:52 stock/doctype/batch/batch.js:75
|
||||
@@ -30899,7 +30899,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:33
|
||||
msgid "Music"
|
||||
msgstr ""
|
||||
msgstr "Música"
|
||||
|
||||
#. Label of the must_be_whole_number (Check) field in DocType 'UOM'
|
||||
#: manufacturing/doctype/work_order/work_order.py:998
|
||||
@@ -31535,7 +31535,7 @@ msgstr "Boletín de noticias"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:34
|
||||
msgid "Newspaper Publishers"
|
||||
msgstr ""
|
||||
msgstr "Editores de periódicos"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -32532,7 +32532,7 @@ msgstr "Tarjetas de trabajo en curso"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:35
|
||||
msgid "Online Auctions"
|
||||
msgstr ""
|
||||
msgstr "Subastas en línea"
|
||||
|
||||
#. Description of the 'Default Advance Account' (Link) field in DocType
|
||||
#. 'Payment Reconciliation'
|
||||
@@ -35564,7 +35564,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:36
|
||||
msgid "Pension Funds"
|
||||
msgstr ""
|
||||
msgstr "Fondos de Pensiones"
|
||||
|
||||
#. Option for the 'Evaluation Period' (Select) field in DocType 'Supplier
|
||||
#. Scorecard'
|
||||
@@ -35814,7 +35814,7 @@ msgstr "Farmacéutico"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:37
|
||||
msgid "Pharmaceuticals"
|
||||
msgstr ""
|
||||
msgstr "Farmacéuticos"
|
||||
|
||||
#. Option for the 'Type' (Select) field in DocType 'Mode of Payment'
|
||||
#. Option for the 'Payment Channel' (Select) field in DocType 'Payment Gateway
|
||||
@@ -37541,7 +37541,7 @@ msgstr "Correo electrónico preferido"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:24
|
||||
msgid "President"
|
||||
msgstr ""
|
||||
msgstr "Presidente"
|
||||
|
||||
#. Label of the prevdoc_doctype (Data) field in DocType 'Packed Item'
|
||||
#: stock/doctype/packed_item/packed_item.json
|
||||
@@ -38305,7 +38305,7 @@ msgstr "La prioridad {0} se ha repetido."
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:38
|
||||
msgid "Private Equity"
|
||||
msgstr ""
|
||||
msgstr "Capital privado"
|
||||
|
||||
#. Label of the probability (Percent) field in DocType 'Prospect Opportunity'
|
||||
#: crm/doctype/prospect_opportunity/prospect_opportunity.json
|
||||
@@ -38366,7 +38366,7 @@ msgstr "Proceso fallido"
|
||||
#: manufacturing/doctype/bom/bom.json
|
||||
#: stock/doctype/stock_entry/stock_entry.json
|
||||
msgid "Process Loss"
|
||||
msgstr ""
|
||||
msgstr "Pérdida por Proceso"
|
||||
|
||||
#: manufacturing/doctype/bom/bom.py:1033
|
||||
msgid "Process Loss Percentage cannot be greater than 100"
|
||||
@@ -38596,7 +38596,7 @@ msgstr "Petición de producto"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:25
|
||||
msgid "Product Manager"
|
||||
msgstr ""
|
||||
msgstr "Gerente de Producto"
|
||||
|
||||
#. Label of the product_price_id (Data) field in DocType 'Subscription Plan'
|
||||
#: accounts/doctype/subscription_plan/subscription_plan.json
|
||||
@@ -38963,7 +38963,7 @@ msgstr "ID del proyecto"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:26
|
||||
msgid "Project Manager"
|
||||
msgstr ""
|
||||
msgstr "Gerente de Proyecto"
|
||||
|
||||
#. Label of the project_name (Data) field in DocType 'Sales Invoice Timesheet'
|
||||
#. Label of the project_name (Data) field in DocType 'Project'
|
||||
@@ -41440,7 +41440,7 @@ msgstr "Lecturas"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:40
|
||||
msgid "Real Estate"
|
||||
msgstr ""
|
||||
msgstr "Bienes Raíces"
|
||||
|
||||
#: support/doctype/issue/issue.js:51
|
||||
msgid "Reason"
|
||||
@@ -43024,7 +43024,7 @@ msgstr "Investigación y desarrollo"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:27
|
||||
msgid "Researcher"
|
||||
msgstr ""
|
||||
msgstr "Investigador"
|
||||
|
||||
#. Description of the 'Supplier Primary Address' (Link) field in DocType
|
||||
#. 'Supplier'
|
||||
@@ -43044,7 +43044,7 @@ msgstr "Vuelva a seleccionar, si el contacto elegido se edita después de guarda
|
||||
|
||||
#: setup/setup_wizard/data/sales_partner_type.txt:7
|
||||
msgid "Reseller"
|
||||
msgstr ""
|
||||
msgstr "Revendedor"
|
||||
|
||||
#: accounts/doctype/payment_request/payment_request.js:39
|
||||
msgid "Resend Payment Email"
|
||||
@@ -43413,11 +43413,11 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:41
|
||||
msgid "Retail & Wholesale"
|
||||
msgstr ""
|
||||
msgstr "Venta minorista y mayorista"
|
||||
|
||||
#: setup/setup_wizard/data/sales_partner_type.txt:5
|
||||
msgid "Retailer"
|
||||
msgstr ""
|
||||
msgstr "Minorista"
|
||||
|
||||
#. Label of the retain_sample (Check) field in DocType 'Item'
|
||||
#. Label of the retain_sample (Check) field in DocType 'Purchase Receipt Item'
|
||||
@@ -45596,7 +45596,7 @@ msgstr "Registro de ventas"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:28
|
||||
msgid "Sales Representative"
|
||||
msgstr ""
|
||||
msgstr "Representante de Ventas"
|
||||
|
||||
#: accounts/report/gross_profit/gross_profit.py:797
|
||||
#: stock/doctype/delivery_note/delivery_note.js:218
|
||||
@@ -46179,7 +46179,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:29
|
||||
msgid "Secretary"
|
||||
msgstr ""
|
||||
msgstr "Secretario/a"
|
||||
|
||||
#: accounts/report/tax_withholding_details/tax_withholding_details.py:172
|
||||
#: accounts/report/tds_computation_summary/tds_computation_summary.py:117
|
||||
@@ -48505,7 +48505,7 @@ msgstr "Constante de suavizado"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:44
|
||||
msgid "Soap & Detergent"
|
||||
msgstr ""
|
||||
msgstr "Jabón y detergente"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:32
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:45
|
||||
@@ -48515,7 +48515,7 @@ msgstr "Software"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:30
|
||||
msgid "Software Developer"
|
||||
msgstr ""
|
||||
msgstr "Desarrollador de Software"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Asset'
|
||||
#: assets/doctype/asset/asset.json assets/doctype/asset/asset_list.js:9
|
||||
@@ -48751,7 +48751,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:46
|
||||
msgid "Sports"
|
||||
msgstr ""
|
||||
msgstr "Deportes"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -52230,11 +52230,11 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:47
|
||||
msgid "Technology"
|
||||
msgstr ""
|
||||
msgstr "Tecnología"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:48
|
||||
msgid "Telecommunications"
|
||||
msgstr ""
|
||||
msgstr "Telecomunicaciones"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:69
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:93
|
||||
@@ -52248,7 +52248,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:49
|
||||
msgid "Television"
|
||||
msgstr ""
|
||||
msgstr "Televisión"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Task'
|
||||
#. Label of the template (Link) field in DocType 'Quality Feedback'
|
||||
@@ -55224,7 +55224,7 @@ msgstr "Recibo de Transporte Nro"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:50
|
||||
msgid "Transportation"
|
||||
msgstr ""
|
||||
msgstr "Transporte"
|
||||
|
||||
#. Label of the transporter (Link) field in DocType 'Driver'
|
||||
#. Label of the transporter (Link) field in DocType 'Delivery Note'
|
||||
@@ -56977,7 +56977,7 @@ msgstr ""
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:31
|
||||
msgid "Vice President"
|
||||
msgstr ""
|
||||
msgstr "Vice Presidente"
|
||||
|
||||
#. Name of a DocType
|
||||
#: utilities/doctype/video/video.json
|
||||
@@ -58963,7 +58963,7 @@ msgstr "[Importante] [ERPNext] Errores de reorden automático"
|
||||
|
||||
#: controllers/status_updater.py:250
|
||||
msgid "`Allow Negative rates for Items`"
|
||||
msgstr ""
|
||||
msgstr "`Permitir precios Negativos para los Productos`"
|
||||
|
||||
#: stock/stock_ledger.py:1792
|
||||
msgid "after"
|
||||
|
||||
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: info@erpnext.com\n"
|
||||
"POT-Creation-Date: 2024-08-18 09:35+0000\n"
|
||||
"PO-Revision-Date: 2024-08-18 12:36\n"
|
||||
"PO-Revision-Date: 2024-08-26 14:59\n"
|
||||
"Last-Translator: info@erpnext.com\n"
|
||||
"Language-Team: Persian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -21,7 +21,7 @@ msgstr ""
|
||||
#. Label of the column_break_32 (Column Break) field in DocType 'Email Digest'
|
||||
#: setup/doctype/email_digest/email_digest.json
|
||||
msgid " "
|
||||
msgstr ""
|
||||
msgstr " "
|
||||
|
||||
#: selling/doctype/quotation/quotation.js:79
|
||||
msgid " Address"
|
||||
@@ -1770,7 +1770,7 @@ msgstr "حساب: {0} با واحد پول: {1} قابل انتخاب نیست"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:1
|
||||
msgid "Accountant"
|
||||
msgstr ""
|
||||
msgstr "حسابدار"
|
||||
|
||||
#. Label of the section_break_19 (Section Break) field in DocType 'POS Profile'
|
||||
#. Label of the accounting (Section Break) field in DocType 'Purchase Invoice
|
||||
@@ -3526,7 +3526,7 @@ msgstr "تعدیل بر اساس نرخ فاکتور خرید"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:2
|
||||
msgid "Administrative Assistant"
|
||||
msgstr ""
|
||||
msgstr "معاون اداری"
|
||||
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:54
|
||||
#: accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:79
|
||||
@@ -3535,7 +3535,7 @@ msgstr "هزینه های اداری"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:3
|
||||
msgid "Administrative Officer"
|
||||
msgstr ""
|
||||
msgstr "کارمند اداری"
|
||||
|
||||
#. Name of a role
|
||||
#: accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json
|
||||
@@ -3652,15 +3652,15 @@ msgstr "پیشرفت ها"
|
||||
|
||||
#: setup/setup_wizard/data/lead_source.txt:3
|
||||
msgid "Advertisement"
|
||||
msgstr ""
|
||||
msgstr "تبلیغات"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:2
|
||||
msgid "Advertising"
|
||||
msgstr ""
|
||||
msgstr "تبلیغات"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:3
|
||||
msgid "Aerospace"
|
||||
msgstr ""
|
||||
msgstr "هوافضا"
|
||||
|
||||
#. Label of the affected_transactions (Code) field in DocType 'Repost Item
|
||||
#. Valuation'
|
||||
@@ -3887,7 +3887,7 @@ msgstr "دستور جلسه"
|
||||
|
||||
#: setup/setup_wizard/data/sales_partner_type.txt:4
|
||||
msgid "Agent"
|
||||
msgstr ""
|
||||
msgstr "عامل"
|
||||
|
||||
#. Label of the agent_busy_message (Data) field in DocType 'Incoming Call
|
||||
#. Settings'
|
||||
@@ -5110,7 +5110,7 @@ msgstr "هنگام ایجاد درخواستهای مواد بر اساس س
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:4
|
||||
msgid "Analyst"
|
||||
msgstr ""
|
||||
msgstr "تحلیلگر"
|
||||
|
||||
#: accounts/doctype/budget/budget.py:235
|
||||
msgid "Annual"
|
||||
@@ -6180,7 +6180,7 @@ msgstr "شرایط واگذاری"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:5
|
||||
msgid "Associate"
|
||||
msgstr ""
|
||||
msgstr "دستیار"
|
||||
|
||||
#: stock/doctype/pick_list/pick_list.py:98
|
||||
msgid "At Row #{0}: The picked quantity {1} for the item {2} is greater than available stock {3} for the batch {4} in the warehouse {5}."
|
||||
@@ -8737,11 +8737,11 @@ msgstr "بوشل (US Dry Level)"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:6
|
||||
msgid "Business Analyst"
|
||||
msgstr ""
|
||||
msgstr "تحلیلگر کسب و کار"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:7
|
||||
msgid "Business Development Manager"
|
||||
msgstr ""
|
||||
msgstr "مدیر توسعه کسب و کار"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Call Log'
|
||||
#: telephony/doctype/call_log/call_log.json
|
||||
@@ -10137,7 +10137,7 @@ msgstr "چک ها و سپرده ها به اشتباه پاک شدند"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:9
|
||||
msgid "Chief Executive Officer"
|
||||
msgstr ""
|
||||
msgstr "مدیر ارشد اجرایی"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:10
|
||||
msgid "Chief Financial Officer"
|
||||
@@ -11636,7 +11636,7 @@ msgstr "کل مبلغ دفتر کل طرف را در نظر بگیرید"
|
||||
#. Plan'
|
||||
#: manufacturing/doctype/production_plan/production_plan.json
|
||||
msgid "Consider Minimum Order Qty"
|
||||
msgstr "حداقل تعداد سفارش را در نظر بگیرید"
|
||||
msgstr "در نظر گرفتن حداقل تعداد سفارش"
|
||||
|
||||
#. Label of the consider_rejected_warehouses (Check) field in DocType 'Pick
|
||||
#. List'
|
||||
@@ -14002,7 +14002,7 @@ msgstr "نرخ ارزش گذاری فعلی"
|
||||
|
||||
#: selling/report/sales_analytics/sales_analytics.js:90
|
||||
msgid "Curves"
|
||||
msgstr ""
|
||||
msgstr "منحنی ها"
|
||||
|
||||
#. Label of the custodian (Link) field in DocType 'Asset'
|
||||
#: assets/doctype/asset/asset.json
|
||||
@@ -15045,7 +15045,7 @@ msgstr "صاحب معامله"
|
||||
|
||||
#: setup/setup_wizard/data/sales_partner_type.txt:3
|
||||
msgid "Dealer"
|
||||
msgstr ""
|
||||
msgstr "فروشنده"
|
||||
|
||||
#: templates/emails/confirm_appointment.html:1
|
||||
msgid "Dear"
|
||||
@@ -16717,7 +16717,7 @@ msgstr "نقش سازمانی"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:14
|
||||
msgid "Designer"
|
||||
msgstr ""
|
||||
msgstr "طراح"
|
||||
|
||||
#. Name of a role
|
||||
#: crm/doctype/lead/lead.json projects/doctype/project/project.json
|
||||
@@ -18276,7 +18276,7 @@ msgstr "ثبت الکترونیکی صورتحساب"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:20
|
||||
msgid "Electronics"
|
||||
msgstr ""
|
||||
msgstr "الکترونیک"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -18882,7 +18882,7 @@ msgstr "پایان دوره اشتراک فعلی"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:21
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
msgstr "انرژی"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:15
|
||||
msgid "Engineer"
|
||||
@@ -19371,7 +19371,7 @@ msgstr "اجرا"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:16
|
||||
msgid "Executive Assistant"
|
||||
msgstr ""
|
||||
msgstr "دستیار اجرایی"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:23
|
||||
msgid "Executive Search"
|
||||
@@ -20175,7 +20175,7 @@ msgstr "کتاب های مالی"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:17
|
||||
msgid "Finance Manager"
|
||||
msgstr ""
|
||||
msgstr "مدیر مالی"
|
||||
|
||||
#. Name of a report
|
||||
#: accounts/report/financial_ratios/financial_ratios.json
|
||||
@@ -21868,7 +21868,7 @@ msgstr ""
|
||||
#. Label of the get_items_for_mr (Button) field in DocType 'Production Plan'
|
||||
#: manufacturing/doctype/production_plan/production_plan.json
|
||||
msgid "Get Raw Materials for Purchase"
|
||||
msgstr "مواد اولیه را برای خرید دریافت کنید"
|
||||
msgstr "دریافت مواد اولیه را برای خرید"
|
||||
|
||||
#. Label of the transfer_materials (Button) field in DocType 'Production Plan'
|
||||
#: manufacturing/doctype/production_plan/production_plan.json
|
||||
@@ -22218,7 +22218,7 @@ msgstr "بخش سلام"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:26
|
||||
msgid "Grocery"
|
||||
msgstr ""
|
||||
msgstr "خواربار"
|
||||
|
||||
#. Label of the gross_margin (Currency) field in DocType 'Project'
|
||||
#: projects/doctype/project/project.json
|
||||
@@ -24024,7 +24024,7 @@ msgstr "شامل نوشته های تطبیق شده"
|
||||
#. Label of the include_safety_stock (Check) field in DocType 'Production Plan'
|
||||
#: manufacturing/doctype/production_plan/production_plan.json
|
||||
msgid "Include Safety Stock in Required Qty Calculation"
|
||||
msgstr "موجودی ایمنی را در محاسبه مقدار مورد نیاز لحاظ کنید"
|
||||
msgstr "لحاظ کردن موجودی ایمنی در محاسبه مقدار مورد نیاز"
|
||||
|
||||
#: manufacturing/report/production_planning_report/production_planning_report.js:87
|
||||
msgid "Include Sub-assembly Raw Materials"
|
||||
@@ -24034,7 +24034,7 @@ msgstr "شامل مواد اولیه زیر مونتاژ"
|
||||
#. 'Production Plan'
|
||||
#: manufacturing/doctype/production_plan/production_plan.json
|
||||
msgid "Include Subcontracted Items"
|
||||
msgstr "شامل موارد قرارداد فرعی"
|
||||
msgstr "شامل آیتمهای قرارداد فرعی"
|
||||
|
||||
#: projects/report/timesheet_billing_summary/timesheet_billing_summary.js:52
|
||||
msgid "Include Timesheets in Draft Status"
|
||||
@@ -24985,7 +24985,7 @@ msgstr "سهم فاکتور"
|
||||
#: accounts/doctype/payment_term/payment_term.json
|
||||
#: accounts/doctype/payment_terms_template_detail/payment_terms_template_detail.json
|
||||
msgid "Invoice Portion (%)"
|
||||
msgstr ""
|
||||
msgstr "سهم فاکتور (%)"
|
||||
|
||||
#: accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:106
|
||||
msgid "Invoice Posting Date"
|
||||
@@ -25269,7 +25269,7 @@ msgstr "قابل گسترش است"
|
||||
#. Label of the is_final_finished_good (Check) field in DocType 'BOM Operation'
|
||||
#: manufacturing/doctype/bom_operation/bom_operation.json
|
||||
msgid "Is Final Finished Good"
|
||||
msgstr ""
|
||||
msgstr "آیا کالای تمام شده نهایی است"
|
||||
|
||||
#. Label of the is_finished_item (Check) field in DocType 'Stock Entry Detail'
|
||||
#: stock/doctype/stock_entry_detail/stock_entry_detail.json
|
||||
@@ -28056,7 +28056,7 @@ msgstr "بیایید شرکت شما را بررسی کنیم"
|
||||
#. Label of an action in the Onboarding Step 'Review Fixed Asset Accounts'
|
||||
#: assets/onboarding_step/fixed_asset_accounts/fixed_asset_accounts.json
|
||||
msgid "Let's walk-through Chart of Accounts to review setup"
|
||||
msgstr ""
|
||||
msgstr "بیایید نمودار حسابها را مرور کنیم تا تنظیمات را بررسی کنیم"
|
||||
|
||||
#. Label of the letter_head (Link) field in DocType 'Dunning'
|
||||
#. Label of the letter_head (Link) field in DocType 'Journal Entry'
|
||||
@@ -28120,7 +28120,7 @@ msgstr "متن پایان نامه یا ایمیل"
|
||||
#. Label of an action in the Onboarding Step 'Sales Order'
|
||||
#: selling/onboarding_step/sales_order/sales_order.json
|
||||
msgid "Let’s convert your first Sales Order against a Quotation"
|
||||
msgstr ""
|
||||
msgstr "بیایید اولین سفارش فروش شما را در برابر یک پیش فاکتور تبدیل کنیم"
|
||||
|
||||
#. Label of an action in the Onboarding Step 'Workstation'
|
||||
#: manufacturing/onboarding_step/workstation/workstation.json
|
||||
@@ -29036,11 +29036,11 @@ msgstr "مدیریت"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:20
|
||||
msgid "Manager"
|
||||
msgstr ""
|
||||
msgstr "مدیر"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:21
|
||||
msgid "Managing Director"
|
||||
msgstr ""
|
||||
msgstr "مدیر عامل"
|
||||
|
||||
#. Label of the reqd (Check) field in DocType 'POS Field'
|
||||
#. Label of the reqd (Check) field in DocType 'Inventory Dimension'
|
||||
@@ -29443,7 +29443,7 @@ msgstr "وضعیت تأهل"
|
||||
#: public/js/templates/crm_activities.html:39
|
||||
#: public/js/templates/crm_activities.html:82
|
||||
msgid "Mark As Closed"
|
||||
msgstr ""
|
||||
msgstr "علامت گذاری به عنوان بسته شده"
|
||||
|
||||
#: erpnext_integrations/doctype/tally_migration/tally_migration.js:323
|
||||
msgid "Mark as unresolved"
|
||||
@@ -29472,11 +29472,11 @@ msgstr "هزینه های بازاریابی"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:22
|
||||
msgid "Marketing Manager"
|
||||
msgstr ""
|
||||
msgstr "مدیر بازاریابی"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:23
|
||||
msgid "Marketing Specialist"
|
||||
msgstr ""
|
||||
msgstr "کارشناس بازاریابی"
|
||||
|
||||
#. Option for the 'Marital Status' (Select) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
@@ -31638,7 +31638,7 @@ msgstr "هیچ موردی با صورتحساب مواد وجود ندارد."
|
||||
|
||||
#: accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js:15
|
||||
msgid "No Matching Bank Transactions Found"
|
||||
msgstr ""
|
||||
msgstr "هیچ تراکنش بانکی منطبقی یافت نشد"
|
||||
|
||||
#: public/js/templates/crm_notes.html:46
|
||||
msgid "No Notes"
|
||||
@@ -31837,7 +31837,7 @@ msgstr "تعداد بازدید"
|
||||
|
||||
#: public/js/templates/crm_activities.html:104
|
||||
msgid "No open event"
|
||||
msgstr ""
|
||||
msgstr "رویداد باز وجود ندارد"
|
||||
|
||||
#: public/js/templates/crm_activities.html:57
|
||||
msgid "No open task"
|
||||
@@ -36042,7 +36042,7 @@ msgstr "گزارش های زمان را خارج از ساعات کاری ایس
|
||||
#. Label of the quantity (Float) field in DocType 'Material Request Plan Item'
|
||||
#: manufacturing/doctype/material_request_plan_item/material_request_plan_item.json
|
||||
msgid "Plan to Request Qty"
|
||||
msgstr "برای درخواست تعداد برنامه ریزی کنید"
|
||||
msgstr "برنامه ریزی برای مقدار درخواست"
|
||||
|
||||
#. Option for the 'Maintenance Status' (Select) field in DocType 'Asset
|
||||
#. Maintenance Log'
|
||||
@@ -38572,7 +38572,7 @@ msgstr "درخواست محصول"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:25
|
||||
msgid "Product Manager"
|
||||
msgstr ""
|
||||
msgstr "مدیر محصول"
|
||||
|
||||
#. Label of the product_price_id (Data) field in DocType 'Subscription Plan'
|
||||
#: accounts/doctype/subscription_plan/subscription_plan.json
|
||||
@@ -38939,7 +38939,7 @@ msgstr "شناسه پروژه"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:26
|
||||
msgid "Project Manager"
|
||||
msgstr ""
|
||||
msgstr "مدیر پروژه"
|
||||
|
||||
#. Label of the project_name (Data) field in DocType 'Sales Invoice Timesheet'
|
||||
#. Label of the project_name (Data) field in DocType 'Project'
|
||||
@@ -39989,7 +39989,7 @@ msgstr "تعداد بعد از تراکنش"
|
||||
#. Plan Item'
|
||||
#: manufacturing/doctype/material_request_plan_item/material_request_plan_item.json
|
||||
msgid "Qty As Per BOM"
|
||||
msgstr "تعداد طبق BOM"
|
||||
msgstr "مقدار طبق BOM"
|
||||
|
||||
#. Label of the actual_qty (Float) field in DocType 'Stock Ledger Entry'
|
||||
#: stock/doctype/stock_ledger_entry/stock_ledger_entry.json
|
||||
@@ -41416,7 +41416,7 @@ msgstr "خواندن"
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:40
|
||||
msgid "Real Estate"
|
||||
msgstr ""
|
||||
msgstr "املاک و مستغلات"
|
||||
|
||||
#: support/doctype/issue/issue.js:51
|
||||
msgid "Reason"
|
||||
@@ -43000,7 +43000,7 @@ msgstr "تحقیق و توسعه"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:27
|
||||
msgid "Researcher"
|
||||
msgstr ""
|
||||
msgstr "پژوهشگر"
|
||||
|
||||
#. Description of the 'Supplier Primary Address' (Link) field in DocType
|
||||
#. 'Supplier'
|
||||
@@ -43551,12 +43551,12 @@ msgstr "مبلغ برگشتی"
|
||||
#: subcontracting/doctype/subcontracting_order_supplied_item/subcontracting_order_supplied_item.json
|
||||
#: subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json
|
||||
msgid "Returned Qty"
|
||||
msgstr "تعداد برگردانده شد"
|
||||
msgstr "مقدار برگردانده شده"
|
||||
|
||||
#. Label of the returned_qty (Float) field in DocType 'Work Order Item'
|
||||
#: manufacturing/doctype/work_order_item/work_order_item.json
|
||||
msgid "Returned Qty "
|
||||
msgstr " تعداد برگردانده شد"
|
||||
msgstr "مقدار برگردانده شده "
|
||||
|
||||
#. Label of the returned_qty (Float) field in DocType 'Delivery Note Item'
|
||||
#. Label of the returned_qty (Float) field in DocType 'Purchase Receipt Item'
|
||||
@@ -44904,7 +44904,7 @@ msgstr "تنظیمات پیامک"
|
||||
|
||||
#: selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.py:43
|
||||
msgid "SO Qty"
|
||||
msgstr ""
|
||||
msgstr "مقدار س.ف."
|
||||
|
||||
#: selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py:107
|
||||
msgid "SO Total Qty"
|
||||
@@ -46155,7 +46155,7 @@ msgstr "نقش ثانویه"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:29
|
||||
msgid "Secretary"
|
||||
msgstr ""
|
||||
msgstr "منشی"
|
||||
|
||||
#: accounts/report/tax_withholding_details/tax_withholding_details.py:172
|
||||
#: accounts/report/tds_computation_summary/tds_computation_summary.py:117
|
||||
@@ -47746,7 +47746,7 @@ msgstr "تنظیمات"
|
||||
#. Title of an Onboarding Step
|
||||
#: setup/onboarding_step/letterhead/letterhead.json
|
||||
msgid "Setup Your Letterhead"
|
||||
msgstr ""
|
||||
msgstr "سربرگ خود را تنظیم کنید"
|
||||
|
||||
#. Title of an Onboarding Step
|
||||
#: stock/onboarding_step/create_a_warehouse/create_a_warehouse.json
|
||||
@@ -48491,7 +48491,7 @@ msgstr "نرمافزار"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:30
|
||||
msgid "Software Developer"
|
||||
msgstr ""
|
||||
msgstr "توسعه دهنده نرمافزار"
|
||||
|
||||
#. Option for the 'Status' (Select) field in DocType 'Asset'
|
||||
#: assets/doctype/asset/asset.json assets/doctype/asset/asset_list.js:9
|
||||
@@ -48727,7 +48727,7 @@ msgstr "تقسیم {0} {1} به ردیفهای {2} طبق شرایط پردا
|
||||
|
||||
#: setup/setup_wizard/data/industry_type.txt:46
|
||||
msgid "Sports"
|
||||
msgstr ""
|
||||
msgstr "ورزشی"
|
||||
|
||||
#. Name of a UOM
|
||||
#: setup/setup_wizard/data/uom_data.json
|
||||
@@ -53736,7 +53736,7 @@ msgstr "برای تحویل و صدور صورتحساب"
|
||||
#. Label of the to_delivery_date (Date) field in DocType 'Production Plan'
|
||||
#: manufacturing/doctype/production_plan/production_plan.json
|
||||
msgid "To Delivery Date"
|
||||
msgstr "به تاریخ تحویل"
|
||||
msgstr "تا تاریخ تحویل"
|
||||
|
||||
#. Label of the to_doctype (Link) field in DocType 'Bulk Transaction Log
|
||||
#. Detail'
|
||||
@@ -57080,7 +57080,7 @@ msgstr "ملاقات کرد"
|
||||
#. Group in Maintenance Schedule's connections
|
||||
#: maintenance/doctype/maintenance_schedule/maintenance_schedule.json
|
||||
msgid "Visits"
|
||||
msgstr ""
|
||||
msgstr "بازدیدها"
|
||||
|
||||
#. Option for the 'Communication Medium Type' (Select) field in DocType
|
||||
#. 'Communication Medium'
|
||||
@@ -58969,7 +58969,7 @@ msgstr ""
|
||||
#. Assembly Item'
|
||||
#: manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json
|
||||
msgid "description"
|
||||
msgstr ""
|
||||
msgstr "شرح"
|
||||
|
||||
#. Option for the 'Plaid Environment' (Select) field in DocType 'Plaid
|
||||
#. Settings'
|
||||
@@ -59029,7 +59029,7 @@ msgstr ""
|
||||
#. Label of the image (Attach Image) field in DocType 'Batch'
|
||||
#: stock/doctype/batch/batch.json
|
||||
msgid "image"
|
||||
msgstr ""
|
||||
msgstr "تصویر"
|
||||
|
||||
#: accounts/doctype/budget/budget.py:273
|
||||
msgid "is already"
|
||||
@@ -59104,7 +59104,7 @@ msgstr "از 5"
|
||||
|
||||
#: accounts/doctype/payment_entry/payment_entry.py:1160
|
||||
msgid "paid to"
|
||||
msgstr ""
|
||||
msgstr "پرداخت شده به"
|
||||
|
||||
#: public/js/utils.js:386
|
||||
msgid "payments app is not installed. Please install it from {0} or {1}"
|
||||
@@ -59152,7 +59152,7 @@ msgstr "نام ردیف آیتمهای باندل محصول در سفارش
|
||||
#. Settings'
|
||||
#: erpnext_integrations/doctype/plaid_settings/plaid_settings.json
|
||||
msgid "production"
|
||||
msgstr ""
|
||||
msgstr "تولید"
|
||||
|
||||
#. Label of the quotation_item (Data) field in DocType 'Sales Order Item'
|
||||
#: selling/doctype/sales_order_item/sales_order_item.json
|
||||
@@ -59203,7 +59203,7 @@ msgstr "اشتراک در حال حاضر لغو شده است."
|
||||
|
||||
#: controllers/status_updater.py:352 controllers/status_updater.py:372
|
||||
msgid "target_ref_field"
|
||||
msgstr ""
|
||||
msgstr "target_ref_field"
|
||||
|
||||
#. Label of the temporary_name (Data) field in DocType 'Production Plan Item'
|
||||
#: manufacturing/doctype/production_plan_item/production_plan_item.json
|
||||
@@ -59213,7 +59213,7 @@ msgstr "نام موقت"
|
||||
#. Label of the title (Data) field in DocType 'Activity Cost'
|
||||
#: projects/doctype/activity_cost/activity_cost.json
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "عنوان"
|
||||
|
||||
#: accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:27
|
||||
#: accounts/report/general_ledger/general_ledger.html:20
|
||||
@@ -59254,7 +59254,7 @@ msgstr "باید در جدول حسابها، حساب سرمایه در جری
|
||||
#: accounts/report/cash_flow/cash_flow.py:220
|
||||
#: accounts/report/cash_flow/cash_flow.py:221
|
||||
msgid "{0}"
|
||||
msgstr ""
|
||||
msgstr "{0}"
|
||||
|
||||
#: controllers/accounts_controller.py:948
|
||||
msgid "{0} '{1}' is disabled"
|
||||
@@ -59754,11 +59754,11 @@ msgstr "{0}%"
|
||||
|
||||
#: controllers/website_list_for_contact.py:203
|
||||
msgid "{0}% Billed"
|
||||
msgstr ""
|
||||
msgstr "{0}% صورتحساب شده"
|
||||
|
||||
#: controllers/website_list_for_contact.py:211
|
||||
msgid "{0}% Delivered"
|
||||
msgstr ""
|
||||
msgstr "{0}% تحویل داده شده"
|
||||
|
||||
#: accounts/doctype/payment_term/payment_term.js:15
|
||||
#, python-format
|
||||
@@ -59839,7 +59839,7 @@ msgstr "{} در دسترس"
|
||||
#: quality_management/workspace/quality/quality.json
|
||||
#: selling/workspace/selling/selling.json
|
||||
msgid "{} Open"
|
||||
msgstr ""
|
||||
msgstr "{} باز"
|
||||
|
||||
#. Count format of shortcut in the Buying Workspace
|
||||
#. Count format of shortcut in the Stock Workspace
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@ msgstr ""
|
||||
"Project-Id-Version: frappe\n"
|
||||
"Report-Msgid-Bugs-To: info@erpnext.com\n"
|
||||
"POT-Creation-Date: 2024-08-18 09:35+0000\n"
|
||||
"PO-Revision-Date: 2024-08-19 12:45\n"
|
||||
"PO-Revision-Date: 2024-08-28 15:40\n"
|
||||
"Last-Translator: info@erpnext.com\n"
|
||||
"Language-Team: Swedish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -10042,7 +10042,7 @@ msgstr "Chain"
|
||||
|
||||
#: selling/page/point_of_sale/pos_payment.js:587
|
||||
msgid "Change"
|
||||
msgstr "Växel Belopp"
|
||||
msgstr "Ändra"
|
||||
|
||||
#. Label of the change_amount (Currency) field in DocType 'POS Invoice'
|
||||
#. Label of the change_amount (Currency) field in DocType 'Sales Invoice'
|
||||
@@ -10794,7 +10794,7 @@ msgstr "Vanlig Kod"
|
||||
#: crm/workspace/crm/crm.json
|
||||
#: setup/setup_wizard/operations/install_fixtures.py:217
|
||||
msgid "Communication"
|
||||
msgstr "Korrespondens"
|
||||
msgstr "E-post"
|
||||
|
||||
#. Label of the communication_channel (Select) field in DocType 'Communication
|
||||
#. Medium'
|
||||
@@ -24426,7 +24426,7 @@ msgstr "Felaktig Kvantitet av Bokföring Register Poster funna. Man kan ha valt
|
||||
#: stock/doctype/purchase_receipt/purchase_receipt.json
|
||||
#: stock/doctype/shipment/shipment.json
|
||||
msgid "Incoterm"
|
||||
msgstr "Inkoterm"
|
||||
msgstr "Incoterm"
|
||||
|
||||
#. Label of the increase_in_asset_life (Int) field in DocType 'Asset Repair'
|
||||
#: assets/doctype/asset_repair/asset_repair.json
|
||||
@@ -37703,12 +37703,12 @@ msgstr "Preferens"
|
||||
#. Label of the prefered_contact_email (Select) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
msgid "Preferred Contact Email"
|
||||
msgstr "Föredragen Kontakt E-post"
|
||||
msgstr "Förvald Kontakt E-post"
|
||||
|
||||
#. Label of the prefered_email (Data) field in DocType 'Employee'
|
||||
#: setup/doctype/employee/employee.json
|
||||
msgid "Preferred Email"
|
||||
msgstr "Föredragen E-Post"
|
||||
msgstr "Förvald E-Post"
|
||||
|
||||
#: setup/setup_wizard/data/designation.txt:24
|
||||
msgid "President"
|
||||
@@ -59048,7 +59048,7 @@ msgstr "Du måste aktivera automatisk ombeställning i lager inställningar för
|
||||
|
||||
#: templates/pages/projects.html:134
|
||||
msgid "You haven't created a {0} yet"
|
||||
msgstr "Du har inte skapat {0} än"
|
||||
msgstr "Ingen {0} skapad än"
|
||||
|
||||
#: selling/page/point_of_sale/pos_controller.js:218
|
||||
msgid "You must add atleast one item to save it as draft."
|
||||
|
||||
1114
erpnext/locale/tr.po
1114
erpnext/locale/tr.po
File diff suppressed because it is too large
Load Diff
@@ -5,18 +5,17 @@
|
||||
"document_type": "Document",
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"bom_and_work_order_tab",
|
||||
"raw_materials_consumption_section",
|
||||
"material_consumption",
|
||||
"get_rm_cost_from_consumption_entry",
|
||||
"column_break_3",
|
||||
"backflush_raw_materials_based_on",
|
||||
"capacity_planning",
|
||||
"disable_capacity_planning",
|
||||
"allow_overtime",
|
||||
"allow_production_on_holidays",
|
||||
"column_break_5",
|
||||
"capacity_planning_for_days",
|
||||
"mins_between_operations",
|
||||
"validate_components_quantities_per_bom",
|
||||
"bom_section",
|
||||
"update_bom_costs_automatically",
|
||||
"column_break_lhyt",
|
||||
"manufacture_sub_assembly_in_operation",
|
||||
"section_break_6",
|
||||
"default_wip_warehouse",
|
||||
"default_fg_warehouse",
|
||||
@@ -30,8 +29,14 @@
|
||||
"add_corrective_operation_cost_in_finished_good_valuation",
|
||||
"column_break_24",
|
||||
"job_card_excess_transfer",
|
||||
"capacity_planning",
|
||||
"disable_capacity_planning",
|
||||
"allow_overtime",
|
||||
"allow_production_on_holidays",
|
||||
"column_break_5",
|
||||
"capacity_planning_for_days",
|
||||
"mins_between_operations",
|
||||
"other_settings_section",
|
||||
"update_bom_costs_automatically",
|
||||
"set_op_cost_and_scrape_from_sub_assemblies",
|
||||
"column_break_23",
|
||||
"make_serial_no_batch_from_work_order"
|
||||
@@ -149,7 +154,7 @@
|
||||
{
|
||||
"fieldname": "raw_materials_consumption_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Raw Materials Consumption"
|
||||
"label": "Raw Materials Consumption "
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_16",
|
||||
@@ -183,8 +188,8 @@
|
||||
},
|
||||
{
|
||||
"fieldname": "job_card_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Job Card"
|
||||
"fieldtype": "Tab Break",
|
||||
"label": "Job Card and Capacity Planning"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_24",
|
||||
@@ -210,13 +215,41 @@
|
||||
"fieldname": "get_rm_cost_from_consumption_entry",
|
||||
"fieldtype": "Check",
|
||||
"label": "Get Raw Materials Cost from Consumption Entry"
|
||||
},
|
||||
{
|
||||
"fieldname": "bom_and_work_order_tab",
|
||||
"fieldtype": "Tab Break",
|
||||
"label": "BOM and Production"
|
||||
},
|
||||
{
|
||||
"fieldname": "bom_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "BOM"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_lhyt",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"description": "If enabled then system will manufacture Sub-assembly against the Job Card (operation).",
|
||||
"fieldname": "manufacture_sub_assembly_in_operation",
|
||||
"fieldtype": "Check",
|
||||
"label": "Manufacture Sub-assembly in Operation"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"depends_on": "eval:doc.backflush_raw_materials_based_on == \"BOM\"",
|
||||
"fieldname": "validate_components_quantities_per_bom",
|
||||
"fieldtype": "Check",
|
||||
"label": "Validate Components Quantities Per BOM"
|
||||
}
|
||||
],
|
||||
"icon": "icon-wrench",
|
||||
"index_web_pages_for_search": 1,
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2024-03-27 13:10:04.700433",
|
||||
"modified": "2024-09-02 12:12:03.132567",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Manufacturing",
|
||||
"name": "Manufacturing Settings",
|
||||
|
||||
@@ -29,15 +29,22 @@ class ManufacturingSettings(Document):
|
||||
get_rm_cost_from_consumption_entry: DF.Check
|
||||
job_card_excess_transfer: DF.Check
|
||||
make_serial_no_batch_from_work_order: DF.Check
|
||||
manufacture_sub_assembly_in_operation: DF.Check
|
||||
material_consumption: DF.Check
|
||||
mins_between_operations: DF.Int
|
||||
overproduction_percentage_for_sales_order: DF.Percent
|
||||
overproduction_percentage_for_work_order: DF.Percent
|
||||
set_op_cost_and_scrape_from_sub_assemblies: DF.Check
|
||||
update_bom_costs_automatically: DF.Check
|
||||
validate_components_quantities_per_bom: DF.Check
|
||||
# end: auto-generated types
|
||||
|
||||
pass
|
||||
def before_save(self):
|
||||
self.reset_values()
|
||||
|
||||
def reset_values(self):
|
||||
if self.backflush_raw_materials_based_on != "BOM" and self.validate_components_quantities_per_bom:
|
||||
self.validate_components_quantities_per_bom = 0
|
||||
|
||||
|
||||
def get_mins_between_operations():
|
||||
|
||||
@@ -2054,6 +2054,108 @@ class TestWorkOrder(FrappeTestCase):
|
||||
"BOM",
|
||||
)
|
||||
|
||||
def test_disassemby_order(self):
|
||||
fg_item = "Test Disassembly Item"
|
||||
source_warehouse = "Stores - _TC"
|
||||
raw_materials = ["Test Disassembly RM Item 1", "Test Disassembly RM Item 2"]
|
||||
|
||||
make_item(fg_item, {"is_stock_item": 1})
|
||||
for item in raw_materials:
|
||||
make_item(item, {"is_stock_item": 1})
|
||||
test_stock_entry.make_stock_entry(
|
||||
item_code=item,
|
||||
target=source_warehouse,
|
||||
qty=1,
|
||||
basic_rate=100,
|
||||
)
|
||||
|
||||
make_bom(item=fg_item, source_warehouse=source_warehouse, raw_materials=raw_materials)
|
||||
|
||||
wo = make_wo_order_test_record(
|
||||
item=fg_item,
|
||||
qty=1,
|
||||
source_warehouse=source_warehouse,
|
||||
skip_transfer=1,
|
||||
)
|
||||
|
||||
stock_entry = frappe.get_doc(make_stock_entry(wo.name, "Manufacture", 1))
|
||||
for row in stock_entry.items:
|
||||
if row.item_code in raw_materials:
|
||||
row.s_warehouse = source_warehouse
|
||||
|
||||
stock_entry.submit()
|
||||
|
||||
wo.reload()
|
||||
self.assertEqual(wo.status, "Completed")
|
||||
|
||||
stock_entry = frappe.get_doc(make_stock_entry(wo.name, "Disassemble", 1))
|
||||
stock_entry.save()
|
||||
|
||||
self.assertEqual(stock_entry.purpose, "Disassemble")
|
||||
|
||||
for row in stock_entry.items:
|
||||
if row.item_code == fg_item:
|
||||
self.assertTrue(row.s_warehouse)
|
||||
self.assertFalse(row.t_warehouse)
|
||||
else:
|
||||
self.assertFalse(row.s_warehouse)
|
||||
self.assertTrue(row.t_warehouse)
|
||||
|
||||
stock_entry.submit()
|
||||
|
||||
def test_components_qty_for_bom_based_manufacture_entry(self):
|
||||
frappe.db.set_single_value("Manufacturing Settings", "backflush_raw_materials_based_on", "BOM")
|
||||
frappe.db.set_single_value("Manufacturing Settings", "validate_components_quantities_per_bom", 1)
|
||||
|
||||
fg_item = "Test FG Item For Component Validation"
|
||||
source_warehouse = "Stores - _TC"
|
||||
raw_materials = ["Test Component Validation RM Item 1", "Test Component Validation RM Item 2"]
|
||||
|
||||
make_item(fg_item, {"is_stock_item": 1})
|
||||
for item in raw_materials:
|
||||
make_item(item, {"is_stock_item": 1})
|
||||
test_stock_entry.make_stock_entry(
|
||||
item_code=item,
|
||||
target=source_warehouse,
|
||||
qty=10,
|
||||
basic_rate=100,
|
||||
)
|
||||
|
||||
make_bom(item=fg_item, source_warehouse=source_warehouse, raw_materials=raw_materials)
|
||||
|
||||
wo = make_wo_order_test_record(
|
||||
item=fg_item,
|
||||
qty=10,
|
||||
source_warehouse=source_warehouse,
|
||||
)
|
||||
|
||||
transfer_entry = frappe.get_doc(make_stock_entry(wo.name, "Material Transfer for Manufacture", 10))
|
||||
transfer_entry.save()
|
||||
for row in transfer_entry.items:
|
||||
row.qty = 5
|
||||
|
||||
self.assertRaises(frappe.ValidationError, transfer_entry.save)
|
||||
|
||||
transfer_entry.reload()
|
||||
for row in transfer_entry.items:
|
||||
self.assertEqual(row.qty, 10)
|
||||
|
||||
transfer_entry.submit()
|
||||
|
||||
manufacture_entry = frappe.get_doc(make_stock_entry(wo.name, "Manufacture", 10))
|
||||
manufacture_entry.save()
|
||||
for row in manufacture_entry.items:
|
||||
if not row.s_warehouse:
|
||||
continue
|
||||
|
||||
row.qty = 5
|
||||
|
||||
self.assertRaises(frappe.ValidationError, manufacture_entry.save)
|
||||
manufacture_entry.reload()
|
||||
manufacture_entry.submit()
|
||||
|
||||
frappe.db.set_single_value("Manufacturing Settings", "validate_components_quantities_per_bom", 0)
|
||||
|
||||
|
||||
def make_operation(**kwargs):
|
||||
kwargs = frappe._dict(kwargs)
|
||||
@@ -2371,6 +2473,7 @@ def make_wo_order_test_record(**args):
|
||||
wo_order.batch_size = args.batch_size or 0
|
||||
|
||||
if args.source_warehouse:
|
||||
wo_order.source_warehouse = args.source_warehouse
|
||||
for item in wo_order.get("required_items"):
|
||||
item.source_warehouse = args.source_warehouse
|
||||
|
||||
|
||||
@@ -177,13 +177,30 @@ frappe.ui.form.on("Work Order", {
|
||||
}
|
||||
}
|
||||
|
||||
if (frm.doc.status == "Completed") {
|
||||
if (frm.doc.__onload.backflush_raw_materials_based_on == "Material Transferred for Manufacture") {
|
||||
frm.add_custom_button(
|
||||
__("BOM"),
|
||||
() => {
|
||||
frm.trigger("make_bom");
|
||||
},
|
||||
__("Create")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
frm.doc.status == "Completed" &&
|
||||
frm.doc.__onload.backflush_raw_materials_based_on == "Material Transferred for Manufacture"
|
||||
frm.doc.docstatus === 1 &&
|
||||
["Closed", "Completed"].includes(frm.doc.status) &&
|
||||
frm.doc.produced_qty > 0
|
||||
) {
|
||||
frm.add_custom_button(__("Create BOM"), () => {
|
||||
frm.trigger("make_bom");
|
||||
});
|
||||
frm.add_custom_button(
|
||||
__("Disassembly Order"),
|
||||
() => {
|
||||
frm.trigger("make_disassembly_order");
|
||||
},
|
||||
__("Create")
|
||||
);
|
||||
}
|
||||
|
||||
frm.trigger("add_custom_button_to_return_components");
|
||||
@@ -345,6 +362,23 @@ frappe.ui.form.on("Work Order", {
|
||||
});
|
||||
},
|
||||
|
||||
make_disassembly_order(frm) {
|
||||
erpnext.work_order
|
||||
.show_prompt_for_qty_input(frm, "Disassemble")
|
||||
.then((data) => {
|
||||
return frappe.xcall("erpnext.manufacturing.doctype.work_order.work_order.make_stock_entry", {
|
||||
work_order_id: frm.doc.name,
|
||||
purpose: "Disassemble",
|
||||
qty: data.qty,
|
||||
target_warehouse: data.target_warehouse,
|
||||
});
|
||||
})
|
||||
.then((stock_entry) => {
|
||||
frappe.model.sync(stock_entry);
|
||||
frappe.set_route("Form", stock_entry.doctype, stock_entry.name);
|
||||
});
|
||||
},
|
||||
|
||||
show_progress_for_items: function (frm) {
|
||||
var bars = [];
|
||||
var message = "";
|
||||
@@ -756,6 +790,10 @@ erpnext.work_order = {
|
||||
|
||||
get_max_transferable_qty: (frm, purpose) => {
|
||||
let max = 0;
|
||||
if (purpose === "Disassemble") {
|
||||
return flt(frm.doc.produced_qty);
|
||||
}
|
||||
|
||||
if (frm.doc.skip_transfer) {
|
||||
max = flt(frm.doc.qty) - flt(frm.doc.produced_qty);
|
||||
} else {
|
||||
@@ -770,15 +808,38 @@ erpnext.work_order = {
|
||||
|
||||
show_prompt_for_qty_input: function (frm, purpose) {
|
||||
let max = this.get_max_transferable_qty(frm, purpose);
|
||||
|
||||
let fields = [
|
||||
{
|
||||
fieldtype: "Float",
|
||||
label: __("Qty for {0}", [__(purpose)]),
|
||||
fieldname: "qty",
|
||||
description: __("Max: {0}", [max]),
|
||||
default: max,
|
||||
},
|
||||
];
|
||||
|
||||
if (purpose === "Disassemble") {
|
||||
fields.push({
|
||||
fieldtype: "Link",
|
||||
options: "Warehouse",
|
||||
fieldname: "target_warehouse",
|
||||
label: __("Target Warehouse"),
|
||||
default: frm.doc.source_warehouse || frm.doc.wip_warehouse,
|
||||
get_query() {
|
||||
return {
|
||||
filters: {
|
||||
company: frm.doc.company,
|
||||
is_group: 0,
|
||||
},
|
||||
};
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
frappe.prompt(
|
||||
{
|
||||
fieldtype: "Float",
|
||||
label: __("Qty for {0}", [__(purpose)]),
|
||||
fieldname: "qty",
|
||||
description: __("Max: {0}", [max]),
|
||||
default: max,
|
||||
},
|
||||
fields,
|
||||
(data) => {
|
||||
max += (frm.doc.qty * (frm.doc.__onload.overproduction_percentage || 0.0)) / 100;
|
||||
|
||||
|
||||
@@ -1398,7 +1398,7 @@ def set_work_order_ops(name):
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def make_stock_entry(work_order_id, purpose, qty=None):
|
||||
def make_stock_entry(work_order_id, purpose, qty=None, target_warehouse=None):
|
||||
work_order = frappe.get_doc("Work Order", work_order_id)
|
||||
if not frappe.db.get_value("Warehouse", work_order.wip_warehouse, "is_group"):
|
||||
wip_warehouse = work_order.wip_warehouse
|
||||
@@ -1428,9 +1428,16 @@ def make_stock_entry(work_order_id, purpose, qty=None):
|
||||
stock_entry.to_warehouse = work_order.fg_warehouse
|
||||
stock_entry.project = work_order.project
|
||||
|
||||
if purpose == "Disassemble":
|
||||
stock_entry.from_warehouse = work_order.fg_warehouse
|
||||
stock_entry.to_warehouse = target_warehouse or work_order.source_warehouse
|
||||
|
||||
stock_entry.set_stock_entry_type()
|
||||
stock_entry.get_items()
|
||||
stock_entry.set_serial_no_batch_for_finished_good()
|
||||
|
||||
if purpose != "Disassemble":
|
||||
stock_entry.set_serial_no_batch_for_finished_good()
|
||||
|
||||
return stock_entry.as_dict()
|
||||
|
||||
|
||||
|
||||
@@ -376,5 +376,6 @@ erpnext.patches.v15_0.update_asset_repair_field_in_stock_entry
|
||||
erpnext.patches.v15_0.update_total_number_of_booked_depreciations
|
||||
erpnext.patches.v15_0.do_not_use_batchwise_valuation
|
||||
erpnext.patches.v15_0.drop_index_posting_datetime_from_sle
|
||||
erpnext.patches.v15_0.add_disassembly_order_stock_entry_type #1
|
||||
erpnext.patches.v15_0.set_standard_stock_entry_type
|
||||
erpnext.patches.v15_0.link_purchase_item_to_asset_doc
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import frappe
|
||||
|
||||
|
||||
def execute():
|
||||
if not frappe.db.exists("Stock Entry Type", "Disassemble"):
|
||||
frappe.get_doc(
|
||||
{
|
||||
"doctype": "Stock Entry Type",
|
||||
"name": "Disassemble",
|
||||
"purpose": "Disassemble",
|
||||
"is_standard": 1,
|
||||
}
|
||||
).insert(ignore_permissions=True)
|
||||
@@ -0,0 +1,10 @@
|
||||
import frappe
|
||||
|
||||
|
||||
def execute():
|
||||
AssetValueAdjustment = frappe.qb.DocType("Asset Value Adjustment")
|
||||
|
||||
frappe.qb.update(AssetValueAdjustment).set(
|
||||
AssetValueAdjustment.difference_amount,
|
||||
AssetValueAdjustment.new_asset_value - AssetValueAdjustment.current_asset_value,
|
||||
).where(AssetValueAdjustment.docstatus != 2).run()
|
||||
@@ -11,6 +11,7 @@ def execute():
|
||||
"Manufacture",
|
||||
"Repack",
|
||||
"Send to Subcontractor",
|
||||
"Disassemble",
|
||||
]:
|
||||
if frappe.db.exists("Stock Entry Type", stock_entry_type):
|
||||
frappe.db.set_value("Stock Entry Type", stock_entry_type, "is_standard", 1)
|
||||
|
||||
@@ -1431,12 +1431,13 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
|
||||
let show = cint(this.frm.doc.discount_amount) ||
|
||||
((this.frm.doc.taxes || []).filter(function(d) {return d.included_in_print_rate===1}).length);
|
||||
|
||||
if(frappe.meta.get_docfield(cur_frm.doctype, "net_total"))
|
||||
if(this.frm.doc.doctype && frappe.meta.get_docfield(this.frm.doc.doctype, "net_total")) {
|
||||
this.frm.toggle_display("net_total", show);
|
||||
}
|
||||
|
||||
if(frappe.meta.get_docfield(cur_frm.doctype, "base_net_total"))
|
||||
if(this.frm.doc.doctype && frappe.meta.get_docfield(this.frm.doc.doctype, "base_net_total")) {
|
||||
this.frm.toggle_display("base_net_total", (show && (me.frm.doc.currency != company_currency)));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
change_grid_labels(company_currency) {
|
||||
|
||||
@@ -20,7 +20,11 @@ $.extend(erpnext, {
|
||||
},
|
||||
|
||||
toggle_naming_series: function () {
|
||||
if (cur_frm && cur_frm.fields_dict.naming_series) {
|
||||
if (
|
||||
cur_frm &&
|
||||
cur_frm.fields_dict.naming_series &&
|
||||
cur_frm.meta.naming_rule == 'By "Naming Series" field'
|
||||
) {
|
||||
cur_frm.toggle_display("naming_series", cur_frm.doc.__islocal ? true : false);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -368,8 +368,28 @@ erpnext.SerialBatchPackageSelector = class SerialNoBatchBundleUpdate {
|
||||
];
|
||||
}
|
||||
|
||||
get_batch_qty(batch_no, callback) {
|
||||
let warehouse = this.item.s_warehouse || this.item.t_warehouse || this.item.warehouse;
|
||||
frappe.call({
|
||||
method: "erpnext.stock.doctype.batch.batch.get_batch_qty",
|
||||
args: {
|
||||
batch_no: batch_no,
|
||||
warehouse: warehouse,
|
||||
item_code: this.item.item_code,
|
||||
posting_date: this.frm.doc.posting_date,
|
||||
posting_time: this.frm.doc.posting_time,
|
||||
},
|
||||
callback: (r) => {
|
||||
if (r.message) {
|
||||
callback(flt(r.message));
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
get_dialog_table_fields() {
|
||||
let fields = [];
|
||||
let me = this;
|
||||
|
||||
if (this.item.has_serial_no) {
|
||||
fields.push({
|
||||
@@ -395,6 +415,15 @@ erpnext.SerialBatchPackageSelector = class SerialNoBatchBundleUpdate {
|
||||
fieldname: "batch_no",
|
||||
label: __("Batch No"),
|
||||
in_list_view: 1,
|
||||
change() {
|
||||
let doc = this.doc;
|
||||
if (!doc.qty && me.item.type_of_transaction === "Outward") {
|
||||
me.get_batch_qty(doc.batch_no, (qty) => {
|
||||
doc.qty = qty;
|
||||
this.grid.set_value("qty", qty, doc);
|
||||
});
|
||||
}
|
||||
},
|
||||
get_query: () => {
|
||||
let is_inward = false;
|
||||
if (
|
||||
|
||||
@@ -308,13 +308,15 @@
|
||||
"fetch_from": "customer_primary_contact.mobile_no",
|
||||
"fieldname": "mobile_no",
|
||||
"fieldtype": "Read Only",
|
||||
"label": "Mobile No"
|
||||
"label": "Mobile No",
|
||||
"options": "Mobile"
|
||||
},
|
||||
{
|
||||
"fetch_from": "customer_primary_contact.email_id",
|
||||
"fieldname": "email_id",
|
||||
"fieldtype": "Read Only",
|
||||
"label": "Email Id"
|
||||
"label": "Email Id",
|
||||
"options": "Email"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_26",
|
||||
@@ -592,7 +594,7 @@
|
||||
"link_fieldname": "party"
|
||||
}
|
||||
],
|
||||
"modified": "2024-05-08 18:03:20.716169",
|
||||
"modified": "2024-06-17 03:24:59.612974",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Selling",
|
||||
"name": "Customer",
|
||||
@@ -677,4 +679,4 @@
|
||||
"states": [],
|
||||
"title_field": "customer_name",
|
||||
"track_changes": 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ class Customer(TransactionBase):
|
||||
elif cust_master_name == "Naming Series":
|
||||
set_name_by_naming_series(self)
|
||||
else:
|
||||
self.name = set_name_from_naming_options(frappe.get_meta(self.doctype).autoname, self)
|
||||
set_name_from_naming_options(frappe.get_meta(self.doctype).autoname, self)
|
||||
|
||||
def get_customer_name(self):
|
||||
if frappe.db.get_value("Customer", self.customer_name) and not frappe.flags.in_import:
|
||||
|
||||
@@ -103,6 +103,7 @@ def install(country=None):
|
||||
"purpose": "Repack",
|
||||
"is_standard": 1,
|
||||
},
|
||||
{"doctype": "Stock Entry Type", "name": "Disassemble", "purpose": "Disassemble", "is_standard": 1},
|
||||
{
|
||||
"doctype": "Stock Entry Type",
|
||||
"name": _("Send to Subcontractor"),
|
||||
|
||||
@@ -345,7 +345,13 @@ class Item(Document):
|
||||
def validate_item_tax_net_rate_range(self):
|
||||
for tax in self.get("taxes"):
|
||||
if flt(tax.maximum_net_rate) < flt(tax.minimum_net_rate):
|
||||
frappe.throw(_("Row #{0}: Maximum Net Rate cannot be greater than Minimum Net Rate"))
|
||||
frappe.throw(
|
||||
_("Taxes row #{0}: {1} cannot be smaller than {2}").format(
|
||||
tax.idx,
|
||||
bold(_(tax.meta.get_label("maximum_net_rate"))),
|
||||
bold(_(tax.meta.get_label("minimum_net_rate"))),
|
||||
)
|
||||
)
|
||||
|
||||
def update_template_tables(self):
|
||||
template = frappe.get_cached_doc("Item", self.variant_of)
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
"label": "Purpose",
|
||||
"oldfieldname": "purpose",
|
||||
"oldfieldtype": "Select",
|
||||
"options": "Material Issue\nMaterial Receipt\nMaterial Transfer\nMaterial Transfer for Manufacture\nMaterial Consumption for Manufacture\nManufacture\nRepack\nSend to Subcontractor",
|
||||
"options": "Material Issue\nMaterial Receipt\nMaterial Transfer\nMaterial Transfer for Manufacture\nMaterial Consumption for Manufacture\nManufacture\nRepack\nSend to Subcontractor\nDisassemble",
|
||||
"read_only": 1,
|
||||
"search_index": 1
|
||||
},
|
||||
@@ -143,7 +143,7 @@
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:in_list([\"Material Transfer for Manufacture\", \"Manufacture\", \"Material Consumption for Manufacture\"], doc.purpose)",
|
||||
"depends_on": "eval:in_list([\"Material Transfer for Manufacture\", \"Manufacture\", \"Material Consumption for Manufacture\", \"Disassemble\"], doc.purpose)",
|
||||
"fieldname": "work_order",
|
||||
"fieldtype": "Link",
|
||||
"label": "Work Order",
|
||||
@@ -242,7 +242,7 @@
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"depends_on": "eval:in_list([\"Material Issue\", \"Material Transfer\", \"Manufacture\", \"Repack\", \"Send to Subcontractor\", \"Material Transfer for Manufacture\", \"Material Consumption for Manufacture\"], doc.purpose)",
|
||||
"depends_on": "eval:in_list([\"Material Issue\", \"Material Transfer\", \"Manufacture\", \"Repack\", \"Send to Subcontractor\", \"Material Transfer for Manufacture\", \"Material Consumption for Manufacture\", \"Disassemble\"], doc.purpose)",
|
||||
"fieldname": "from_bom",
|
||||
"fieldtype": "Check",
|
||||
"label": "From BOM",
|
||||
@@ -697,7 +697,7 @@
|
||||
"index_web_pages_for_search": 1,
|
||||
"is_submittable": 1,
|
||||
"links": [],
|
||||
"modified": "2024-08-13 19:02:42.386955",
|
||||
"modified": "2024-08-13 19:05:42.386955",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Stock Entry",
|
||||
|
||||
@@ -132,6 +132,7 @@ class StockEntry(StockController):
|
||||
"Manufacture",
|
||||
"Repack",
|
||||
"Send to Subcontractor",
|
||||
"Disassemble",
|
||||
]
|
||||
remarks: DF.Text | None
|
||||
sales_invoice_no: DF.Link | None
|
||||
@@ -234,6 +235,7 @@ class StockEntry(StockController):
|
||||
self.validate_serialized_batch()
|
||||
self.calculate_rate_and_amount()
|
||||
self.validate_putaway_capacity()
|
||||
self.validate_component_quantities()
|
||||
|
||||
if self.get("purpose") != "Manufacture":
|
||||
# ignore scrap item wh difference and empty source/target wh
|
||||
@@ -354,6 +356,7 @@ class StockEntry(StockController):
|
||||
"Repack",
|
||||
"Send to Subcontractor",
|
||||
"Material Consumption for Manufacture",
|
||||
"Disassemble",
|
||||
]
|
||||
|
||||
if self.purpose not in valid_purposes:
|
||||
@@ -631,6 +634,7 @@ class StockEntry(StockController):
|
||||
"Manufacture",
|
||||
"Material Transfer for Manufacture",
|
||||
"Material Consumption for Manufacture",
|
||||
"Disassemble",
|
||||
):
|
||||
# check if work order is entered
|
||||
|
||||
@@ -761,6 +765,34 @@ class StockEntry(StockController):
|
||||
title=_("Insufficient Stock"),
|
||||
)
|
||||
|
||||
def validate_component_quantities(self):
|
||||
if self.purpose not in ["Manufacture", "Material Transfer for Manufacture"]:
|
||||
return
|
||||
|
||||
if not frappe.db.get_single_value("Manufacturing Settings", "validate_components_quantities_per_bom"):
|
||||
return
|
||||
|
||||
if not self.fg_completed_qty:
|
||||
return
|
||||
|
||||
raw_materials = self.get_bom_raw_materials(self.fg_completed_qty)
|
||||
|
||||
precision = frappe.get_precision("Stock Entry Detail", "qty")
|
||||
for row in self.items:
|
||||
if not row.s_warehouse:
|
||||
continue
|
||||
|
||||
if details := raw_materials.get(row.item_code):
|
||||
if flt(details.get("qty"), precision) != flt(row.qty, precision):
|
||||
frappe.throw(
|
||||
_("For the item {0}, the quantity should be {1} according to the BOM {2}.").format(
|
||||
frappe.bold(row.item_code),
|
||||
flt(details.get("qty"), precision),
|
||||
get_link_to_form("BOM", self.bom_no),
|
||||
),
|
||||
title=_("Incorrect Component Quantity"),
|
||||
)
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_stock_and_rate(self):
|
||||
"""
|
||||
@@ -1726,11 +1758,63 @@ class StockEntry(StockController):
|
||||
},
|
||||
)
|
||||
|
||||
def get_items_for_disassembly(self):
|
||||
"""Get items for Disassembly Order"""
|
||||
|
||||
if not self.work_order:
|
||||
frappe.throw(_("The Work Order is mandatory for Disassembly Order"))
|
||||
|
||||
items = self.get_items_from_manufacture_entry()
|
||||
|
||||
s_warehouse = ""
|
||||
if self.work_order:
|
||||
s_warehouse = frappe.db.get_value("Work Order", self.work_order, "fg_warehouse")
|
||||
|
||||
for row in items:
|
||||
child_row = self.append("items", {})
|
||||
for field, value in row.items():
|
||||
if value is not None:
|
||||
child_row.set(field, value)
|
||||
|
||||
child_row.s_warehouse = (self.from_warehouse or s_warehouse) if row.is_finished_item else ""
|
||||
child_row.t_warehouse = self.to_warehouse if not row.is_finished_item else ""
|
||||
child_row.is_finished_item = 0 if row.is_finished_item else 1
|
||||
|
||||
def get_items_from_manufacture_entry(self):
|
||||
return frappe.get_all(
|
||||
"Stock Entry",
|
||||
fields=[
|
||||
"`tabStock Entry Detail`.`item_code`",
|
||||
"`tabStock Entry Detail`.`item_name`",
|
||||
"`tabStock Entry Detail`.`description`",
|
||||
"`tabStock Entry Detail`.`qty`",
|
||||
"`tabStock Entry Detail`.`transfer_qty`",
|
||||
"`tabStock Entry Detail`.`stock_uom`",
|
||||
"`tabStock Entry Detail`.`uom`",
|
||||
"`tabStock Entry Detail`.`basic_rate`",
|
||||
"`tabStock Entry Detail`.`conversion_factor`",
|
||||
"`tabStock Entry Detail`.`is_finished_item`",
|
||||
"`tabStock Entry Detail`.`batch_no`",
|
||||
"`tabStock Entry Detail`.`serial_no`",
|
||||
"`tabStock Entry Detail`.`use_serial_batch_fields`",
|
||||
],
|
||||
filters=[
|
||||
["Stock Entry", "purpose", "=", "Manufacture"],
|
||||
["Stock Entry", "work_order", "=", self.work_order],
|
||||
["Stock Entry", "docstatus", "=", 1],
|
||||
["Stock Entry Detail", "docstatus", "=", 1],
|
||||
],
|
||||
order_by="`tabStock Entry Detail`.`idx` desc, `tabStock Entry Detail`.`is_finished_item` desc",
|
||||
)
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_items(self):
|
||||
self.set("items", [])
|
||||
self.validate_work_order()
|
||||
|
||||
if self.purpose == "Disassemble":
|
||||
return self.get_items_for_disassembly()
|
||||
|
||||
if not self.posting_date or not self.posting_time:
|
||||
frappe.throw(_("Posting date and posting time is mandatory"))
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Purpose",
|
||||
"options": "\nMaterial Issue\nMaterial Receipt\nMaterial Transfer\nMaterial Transfer for Manufacture\nMaterial Consumption for Manufacture\nManufacture\nRepack\nSend to Subcontractor",
|
||||
"options": "\nMaterial Issue\nMaterial Receipt\nMaterial Transfer\nMaterial Transfer for Manufacture\nMaterial Consumption for Manufacture\nManufacture\nRepack\nSend to Subcontractor\nDisassemble",
|
||||
"reqd": 1,
|
||||
"set_only_once": 1
|
||||
},
|
||||
@@ -37,10 +37,11 @@
|
||||
}
|
||||
],
|
||||
"links": [],
|
||||
"modified": "2024-08-22 16:00:22.696958",
|
||||
"modified": "2024-08-23 16:00:22.696958",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Stock Entry Type",
|
||||
"naming_rule": "Set by user",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@ class StockEntryType(Document):
|
||||
"Manufacture",
|
||||
"Repack",
|
||||
"Send to Subcontractor",
|
||||
"Disassemble",
|
||||
]
|
||||
# end: auto-generated types
|
||||
|
||||
@@ -48,6 +49,7 @@ class StockEntryType(Document):
|
||||
"Manufacture",
|
||||
"Repack",
|
||||
"Send to Subcontractor",
|
||||
"Disassemble",
|
||||
]:
|
||||
frappe.throw(f"Stock Entry Type {self.name} cannot be set as standard")
|
||||
|
||||
|
||||
@@ -352,7 +352,8 @@
|
||||
{
|
||||
"fieldname": "posting_datetime",
|
||||
"fieldtype": "Datetime",
|
||||
"label": "Posting Datetime"
|
||||
"label": "Posting Datetime",
|
||||
"search_index": 1
|
||||
}
|
||||
],
|
||||
"hide_toolbar": 1,
|
||||
@@ -361,7 +362,7 @@
|
||||
"in_create": 1,
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-06-27 16:23:18.820049",
|
||||
"modified": "2024-08-27 09:28:03.961443",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Stock",
|
||||
"name": "Stock Ledger Entry",
|
||||
|
||||
@@ -351,3 +351,4 @@ def on_doctype_update():
|
||||
frappe.db.add_index("Stock Ledger Entry", ["voucher_no", "voucher_type"])
|
||||
frappe.db.add_index("Stock Ledger Entry", ["batch_no", "item_code", "warehouse"])
|
||||
frappe.db.add_index("Stock Ledger Entry", ["warehouse", "item_code"], "item_warehouse")
|
||||
frappe.db.add_index("Stock Ledger Entry", ["posting_datetime", "creation"])
|
||||
|
||||
Reference in New Issue
Block a user