mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-18 09:05:00 +00:00
Merge branch 'version-13-hotfix' into mergify/bp/version-13-hotfix/pr-30499
This commit is contained in:
@@ -124,11 +124,10 @@ def get_columns(invoice_list, additional_table_columns):
|
||||
_("Purchase Receipt") + ":Link/Purchase Receipt:100",
|
||||
{"fieldname": "currency", "label": _("Currency"), "fieldtype": "Data", "width": 80},
|
||||
]
|
||||
expense_accounts = (
|
||||
tax_accounts
|
||||
) = (
|
||||
expense_columns
|
||||
) = tax_columns = unrealized_profit_loss_accounts = unrealized_profit_loss_account_columns = []
|
||||
|
||||
expense_accounts = []
|
||||
tax_accounts = []
|
||||
unrealized_profit_loss_accounts = []
|
||||
|
||||
if invoice_list:
|
||||
expense_accounts = frappe.db.sql_list(
|
||||
@@ -163,10 +162,11 @@ def get_columns(invoice_list, additional_table_columns):
|
||||
unrealized_profit_loss_account_columns = [
|
||||
(account + ":Currency/currency:120") for account in unrealized_profit_loss_accounts
|
||||
]
|
||||
|
||||
for account in tax_accounts:
|
||||
if account not in expense_accounts:
|
||||
tax_columns.append(account + ":Currency/currency:120")
|
||||
tax_columns = [
|
||||
(account + ":Currency/currency:120")
|
||||
for account in tax_accounts
|
||||
if account not in expense_accounts
|
||||
]
|
||||
|
||||
columns = (
|
||||
columns
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
"actions": [],
|
||||
"allow_import": 1,
|
||||
"allow_rename": 1,
|
||||
"autoname": "field:healthcare_service_unit_name",
|
||||
"beta": 1,
|
||||
"creation": "2016-09-21 13:48:14.731437",
|
||||
"description": "Healthcare Service Unit",
|
||||
@@ -207,7 +206,7 @@
|
||||
],
|
||||
"is_tree": 1,
|
||||
"links": [],
|
||||
"modified": "2021-08-19 14:09:11.643464",
|
||||
"modified": "2022-04-07 03:11:36.023277",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Healthcare",
|
||||
"name": "Healthcare Service Unit",
|
||||
|
||||
@@ -34,6 +34,15 @@ frappe.ui.form.on("Leave Allocation", {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// make new leaves allocated field read only if allocation is created via leave policy assignment
|
||||
// and leave type is earned leave, since these leaves would be allocated via the scheduler
|
||||
if (frm.doc.leave_policy_assignment) {
|
||||
frappe.db.get_value("Leave Type", frm.doc.leave_type, "is_earned_leave", (r) => {
|
||||
if (r && cint(r.is_earned_leave))
|
||||
frm.set_df_property("new_leaves_allocated", "read_only", 1);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
expire_allocation: function(frm) {
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
"index_web_pages_for_search": 1,
|
||||
"is_submittable": 1,
|
||||
"links": [],
|
||||
"modified": "2021-10-01 15:28:26.335104",
|
||||
"modified": "2022-04-07 09:50:33.145825",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Leave Allocation",
|
||||
@@ -278,5 +278,7 @@
|
||||
"show_name_in_global_search": 1,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"timeline_field": "employee"
|
||||
"timeline_field": "employee",
|
||||
"title_field": "employee_name",
|
||||
"track_changes": 1
|
||||
}
|
||||
|
||||
@@ -489,6 +489,17 @@ def update_previous_leave_allocation(
|
||||
allocation.db_set("total_leaves_allocated", new_allocation, update_modified=False)
|
||||
create_additional_leave_ledger_entry(allocation, earned_leaves, today_date)
|
||||
|
||||
if e_leave_type.based_on_date_of_joining:
|
||||
text = _("allocated {0} leave(s) via scheduler on {1} based on the date of joining").format(
|
||||
frappe.bold(earned_leaves), frappe.bold(formatdate(today_date))
|
||||
)
|
||||
else:
|
||||
text = _("allocated {0} leave(s) via scheduler on {1}").format(
|
||||
frappe.bold(earned_leaves), frappe.bold(formatdate(today_date))
|
||||
)
|
||||
|
||||
allocation.add_comment(comment_type="Info", text=text)
|
||||
|
||||
|
||||
def get_monthly_earned_leave(annual_leaves, frequency, rounding):
|
||||
earned_leaves = 0.0
|
||||
|
||||
@@ -100,7 +100,8 @@ class Customer(TransactionBase):
|
||||
@frappe.whitelist()
|
||||
def get_customer_group_details(self):
|
||||
doc = frappe.get_doc("Customer Group", self.customer_group)
|
||||
self.accounts = self.credit_limits = []
|
||||
self.accounts = []
|
||||
self.credit_limits = []
|
||||
self.payment_terms = self.default_price_list = ""
|
||||
|
||||
tables = [["accounts", "account"], ["credit_limits", "credit_limit"]]
|
||||
|
||||
@@ -47,7 +47,8 @@ class TestCustomer(FrappeTestCase):
|
||||
c_doc.customer_name = "Testing Customer"
|
||||
c_doc.customer_group = "_Testing Customer Group"
|
||||
c_doc.payment_terms = c_doc.default_price_list = ""
|
||||
c_doc.accounts = c_doc.credit_limits = []
|
||||
c_doc.accounts = []
|
||||
c_doc.credit_limits = []
|
||||
c_doc.insert()
|
||||
c_doc.get_customer_group_details()
|
||||
self.assertEqual(c_doc.payment_terms, "_Test Payment Term Template 3")
|
||||
|
||||
@@ -18,6 +18,7 @@ from frappe.utils import (
|
||||
now_datetime,
|
||||
nowtime,
|
||||
strip,
|
||||
strip_html,
|
||||
)
|
||||
from frappe.utils.html_utils import clean_html
|
||||
|
||||
@@ -69,10 +70,6 @@ class Item(Document):
|
||||
self.item_code = strip(self.item_code)
|
||||
self.name = self.item_code
|
||||
|
||||
def before_insert(self):
|
||||
if not self.description:
|
||||
self.description = self.item_name
|
||||
|
||||
def after_insert(self):
|
||||
"""set opening stock and item price"""
|
||||
if self.standard_rate:
|
||||
@@ -86,7 +83,7 @@ class Item(Document):
|
||||
if not self.item_name:
|
||||
self.item_name = self.item_code
|
||||
|
||||
if not self.description:
|
||||
if not strip_html(cstr(self.description)).strip():
|
||||
self.description = self.item_name
|
||||
|
||||
self.validate_uom()
|
||||
|
||||
@@ -683,6 +683,13 @@ class TestItem(FrappeTestCase):
|
||||
self.assertEqual(item.sample_quantity, None)
|
||||
item.delete()
|
||||
|
||||
def test_empty_description(self):
|
||||
item = make_item(properties={"description": "<p></p>"})
|
||||
self.assertEqual(item.description, item.item_name)
|
||||
item.description = ""
|
||||
item.save()
|
||||
self.assertEqual(item.description, item.item_name)
|
||||
|
||||
|
||||
def set_item_variant_settings(fields):
|
||||
doc = frappe.get_doc("Item Variant Settings")
|
||||
|
||||
@@ -38,6 +38,16 @@ class TestWarehouse(FrappeTestCase):
|
||||
self.assertEqual(p_warehouse.name, child_warehouse.parent_warehouse)
|
||||
self.assertEqual(child_warehouse.is_group, 0)
|
||||
|
||||
def test_naming(self):
|
||||
company = "Wind Power LLC"
|
||||
warehouse_name = "Named Warehouse - WP"
|
||||
wh = frappe.get_doc(doctype="Warehouse", warehouse_name=warehouse_name, company=company).insert()
|
||||
self.assertEqual(wh.name, warehouse_name)
|
||||
|
||||
warehouse_name = "Unnamed Warehouse"
|
||||
wh = frappe.get_doc(doctype="Warehouse", warehouse_name=warehouse_name, company=company).insert()
|
||||
self.assertIn(warehouse_name, wh.name)
|
||||
|
||||
def test_unlinking_warehouse_from_item_defaults(self):
|
||||
company = "_Test Company"
|
||||
|
||||
|
||||
@@ -21,8 +21,9 @@ class Warehouse(NestedSet):
|
||||
suffix = " - " + frappe.get_cached_value("Company", self.company, "abbr")
|
||||
if not self.warehouse_name.endswith(suffix):
|
||||
self.name = self.warehouse_name + suffix
|
||||
else:
|
||||
self.name = self.warehouse_name
|
||||
return
|
||||
|
||||
self.name = self.warehouse_name
|
||||
|
||||
def onload(self):
|
||||
"""load account name for General Ledger Report"""
|
||||
|
||||
@@ -285,7 +285,7 @@ Asset scrapped via Journal Entry {0},Actif mis au rebut via Écriture de Journal
|
||||
"Asset {0} cannot be scrapped, as it is already {1}","L'actif {0} ne peut pas être mis au rebut, car il est déjà {1}",
|
||||
Asset {0} does not belong to company {1},L'actif {0} ne fait pas partie à la société {1},
|
||||
Asset {0} must be submitted,L'actif {0} doit être soumis,
|
||||
Assets,Les atouts,
|
||||
Assets,Actifs - Immo.,
|
||||
Assign,Assigner,
|
||||
Assign Salary Structure,Affecter la structure salariale,
|
||||
Assign To,Attribuer À,
|
||||
@@ -1211,7 +1211,7 @@ Hello,Bonjour,
|
||||
Help Results for,Aide Résultats pour,
|
||||
High,Haut,
|
||||
High Sensitivity,Haute sensibilité,
|
||||
Hold,Tenir,
|
||||
Hold,Mettre en attente,
|
||||
Hold Invoice,Facture en attente,
|
||||
Holiday,Vacances,
|
||||
Holiday List,Liste de vacances,
|
||||
@@ -4240,7 +4240,7 @@ For Default Supplier (Optional),Pour le fournisseur par défaut (facultatif),
|
||||
From date cannot be greater than To date,La Date Initiale ne peut pas être postérieure à la Date Finale,
|
||||
Group by,Grouper Par,
|
||||
In stock,En stock,
|
||||
Item name,Nom de l'article,
|
||||
Item name,Libellé de l'article,
|
||||
Loan amount is mandatory,Le montant du prêt est obligatoire,
|
||||
Minimum Qty,Quantité minimum,
|
||||
More details,Plus de détails,
|
||||
@@ -5473,7 +5473,7 @@ Percentage you are allowed to transfer more against the quantity ordered. For ex
|
||||
PUR-ORD-.YYYY.-,PUR-ORD-.YYYY.-,
|
||||
Get Items from Open Material Requests,Obtenir des Articles de Demandes Matérielles Ouvertes,
|
||||
Fetch items based on Default Supplier.,Récupérez les articles en fonction du fournisseur par défaut.,
|
||||
Required By,Requis Par,
|
||||
Required By,Requis pour le,
|
||||
Order Confirmation No,No de confirmation de commande,
|
||||
Order Confirmation Date,Date de confirmation de la commande,
|
||||
Customer Mobile No,N° de Portable du Client,
|
||||
@@ -7223,8 +7223,8 @@ Basic Rate (Company Currency),Taux de Base (Devise de la Société ),
|
||||
Scrap %,% de Rebut,
|
||||
Original Item,Article original,
|
||||
BOM Operation,Opération LDM,
|
||||
Operation Time ,Moment de l'opération,
|
||||
In minutes,En quelques minutes,
|
||||
Operation Time ,Durée de l'opération,
|
||||
In minutes,En minutes,
|
||||
Batch Size,Taille du lot,
|
||||
Base Hour Rate(Company Currency),Taux Horaire de Base (Devise de la Société),
|
||||
Operating Cost(Company Currency),Coût d'Exploitation (Devise Société),
|
||||
@@ -9267,7 +9267,7 @@ Sales Order Analysis,Analyse des commandes clients,
|
||||
Amount Delivered,Montant livré,
|
||||
Delay (in Days),Retard (en jours),
|
||||
Group by Sales Order,Regrouper par commande client,
|
||||
Sales Value,La valeur des ventes,
|
||||
Sales Value,La valeur des ventes,
|
||||
Stock Qty vs Serial No Count,Quantité de stock vs numéro de série,
|
||||
Serial No Count,Numéro de série,
|
||||
Work Order Summary,Résumé de l'ordre de travail,
|
||||
@@ -9647,7 +9647,7 @@ Allow Multiple Sales Orders Against a Customer's Purchase Order,Autoriser plusie
|
||||
Validate Selling Price for Item Against Purchase Rate or Valuation Rate,Valider le prix de vente de l'article par rapport au taux d'achat ou au taux de valorisation,
|
||||
Hide Customer's Tax ID from Sales Transactions,Masquer le numéro d'identification fiscale du client dans les transactions de vente,
|
||||
"The percentage you are allowed to receive or deliver more against the quantity ordered. For example, if you have ordered 100 units, and your Allowance is 10%, then you are allowed to receive 110 units.","Le pourcentage que vous êtes autorisé à recevoir ou à livrer plus par rapport à la quantité commandée. Par exemple, si vous avez commandé 100 unités et que votre allocation est de 10%, vous êtes autorisé à recevoir 110 unités.",
|
||||
Action If Quality Inspection Is Not Submitted,Action si l'inspection de la qualité n'est pas soumise,
|
||||
Action If Quality Inspection Is Not Submitted,Action si l'inspection qualité n'est pas soumise,
|
||||
Auto Insert Price List Rate If Missing,Taux de liste de prix d'insertion automatique s'il est manquant,
|
||||
Automatically Set Serial Nos Based on FIFO,Définir automatiquement les numéros de série en fonction de FIFO,
|
||||
Set Qty in Transactions Based on Serial No Input,Définir la quantité dans les transactions en fonction du numéro de série,
|
||||
@@ -9838,3 +9838,36 @@ Enable European Access,Activer l'accès européen,
|
||||
Creating Purchase Order ...,Création d'une commande d'achat ...,
|
||||
"Select a Supplier from the Default Suppliers of the items below. On selection, a Purchase Order will be made against items belonging to the selected Supplier only.","Sélectionnez un fournisseur parmi les fournisseurs par défaut des articles ci-dessous. Lors de la sélection, un bon de commande sera effectué contre des articles appartenant uniquement au fournisseur sélectionné.",
|
||||
Row #{}: You must select {} serial numbers for item {}.,Ligne n ° {}: vous devez sélectionner {} numéros de série pour l'article {}.,
|
||||
Update Rate as per Last Purchase,Mettre à jour avec les derniers prix d'achats
|
||||
Company Shipping Address,Adresse d'expédition
|
||||
Shipping Address Details,Détail d'adresse d'expédition
|
||||
Company Billing Address,Adresse de la société de facturation
|
||||
Supplier Address Details,
|
||||
Bank Reconciliation Tool,Outil de réconcialiation d'écritures bancaires
|
||||
Supplier Contact,Contact fournisseur
|
||||
Subcontracting,Sous traitance
|
||||
Order Status,Statut de la commande
|
||||
Build,Personnalisations avancées
|
||||
Dispatch Address Name,Adresse de livraison intermédiaire
|
||||
Amount Eligible for Commission,Montant éligible à comission
|
||||
Grant Commission,Eligible aux commissions
|
||||
Stock Transactions Settings, Paramétre des transactions
|
||||
Role Allowed to Over Deliver/Receive, Rôle autorisé à dépasser cette limite
|
||||
Users with this role are allowed to over deliver/receive against orders above the allowance percentage,Rôle Utilisateur qui sont autorisé à livrée/commandé au-delà de la limite
|
||||
Over Transfer Allowance,Autorisation de limite de transfert
|
||||
"The percentage you are allowed to transfer more against the quantity ordered. For example, if you have ordered 100 units, and your Allowance is 10%, then you are allowed transfer 110 units","Le pourcentage de quantité que vous pourrez receptionné en plus de la quantité commandée"
|
||||
Quality Inspection Settings,Paramétre de l'inspection qualité
|
||||
Action If Quality Inspection Is Rejected,Action si l'inspection qualité est rejetée
|
||||
Disable Serial No And Batch Selector,Désactiver le sélecteur de numéro de lot/série
|
||||
Is Rate Adjustment Entry (Debit Note),Est un justement du prix de la note de débit
|
||||
Issue a debit note with 0 qty against an existing Sales Invoice,Creer une note de débit avec une quatité à O pour la facture
|
||||
Control Historical Stock Transactions,Controle de l'historique des stransaction de stock
|
||||
No stock transactions can be created or modified before this date.,Aucune transaction ne peux être créée ou modifié avant cette date.
|
||||
Stock transactions that are older than the mentioned days cannot be modified.,Les transactions de stock plus ancienne que le nombre de jours ci-dessus ne peuvent être modifiées
|
||||
Role Allowed to Create/Edit Back-dated Transactions,Rôle autorisé à créer et modifier des transactions anti-datée
|
||||
"If mentioned, the system will allow only the users with this Role to create or modify any stock transaction earlier than the latest stock transaction for a specific item and warehouse. If set as blank, it allows all users to create/edit back-dated transactions.","LEs utilisateur de ce role pourront creer et modifier des transactions dans le passé. Si vide tout les utilisateurs pourrons le faire"
|
||||
Auto Insert Item Price If Missing,Création du prix de l'article dans les listes de prix si abscent
|
||||
Update Existing Price List Rate,Mise a jour automatique du prix dans les listes de prix
|
||||
Show Barcode Field in Stock Transactions,Afficher le champ Code Barre dans les transactions de stock
|
||||
Convert Item Description to Clean HTML in Transactions,Convertir les descriptions d'articles en HTML valide lors des transactions
|
||||
Have Default Naming Series for Batch ID?,Nom de série par défaut pour les Lots ou Séries
|
||||
|
||||
|
Can't render this file because it is too large.
|
Reference in New Issue
Block a user