livrare website cu erp si crm
This commit is contained in:
parent
28773e3a72
commit
5c7bf7c295
257 changed files with 31929 additions and 0 deletions
244
erp_crm/scripts/setup/05-translations.py
Normal file
244
erp_crm/scripts/setup/05-translations.py
Normal file
|
|
@ -0,0 +1,244 @@
|
|||
"""
|
||||
Set ERPNext to Romanian + add custom translations for DiDi labels.
|
||||
Run: python setup-translations.py
|
||||
"""
|
||||
import requests
|
||||
import json
|
||||
import sys
|
||||
import io
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||||
|
||||
URL = "http://localhost:8080"
|
||||
s = requests.Session()
|
||||
login = s.post(f"{URL}/api/method/login", data={"usr": "Administrator", "pwd": "admin"})
|
||||
if login.status_code != 200:
|
||||
print("Login failed"); exit(1)
|
||||
print("Logged in as Administrator")
|
||||
|
||||
# ── 1. Set system language to Romanian ──
|
||||
print("\n1. Setting system language to Romanian...")
|
||||
r = s.put(f"{URL}/api/resource/System%20Settings/System%20Settings", json={
|
||||
"language": "ro",
|
||||
"date_format": "dd.mm.yyyy",
|
||||
"time_format": "HH:mm:ss",
|
||||
"number_format": "#.###,##",
|
||||
"country": "Romania",
|
||||
"first_day_of_the_week": "Monday",
|
||||
})
|
||||
print(f" System Settings: {r.status_code}")
|
||||
|
||||
# ── 2. Set Administrator language to RO ──
|
||||
print("\n2. Setting Administrator language...")
|
||||
r = s.put(f"{URL}/api/resource/User/Administrator", json={"language": "ro"})
|
||||
print(f" Admin language: {r.status_code}")
|
||||
|
||||
# Also API user
|
||||
r = s.put(f"{URL}/api/resource/User/website_api@didi-erp", json={"language": "ro"})
|
||||
print(f" API user language: {r.status_code}")
|
||||
|
||||
# ── 3. Custom translations for DiDi labels ──
|
||||
print("\n3. Adding custom translations...")
|
||||
|
||||
TRANSLATIONS = {
|
||||
# DocType names
|
||||
"Sales Invoice": "Factura de Vanzare",
|
||||
"Customer": "Client",
|
||||
"Lead": "Lead",
|
||||
"Payment Log": "Jurnal Plati",
|
||||
"Payment Entry": "Incasare",
|
||||
"Service Agreement": "Acord Servicii",
|
||||
"Website Content": "Continut Website",
|
||||
"Analysis Report": "Raport Analiza",
|
||||
"Subscription Plan": "Plan Abonament",
|
||||
"Item": "Articol / Serviciu",
|
||||
"Item Group": "Grup Articole",
|
||||
"Supplier": "Furnizor",
|
||||
"Company": "Companie",
|
||||
"Account": "Cont Contabil",
|
||||
"Purchase Invoice": "Factura de Achizitie",
|
||||
"Email Template": "Sablon Email",
|
||||
"Sales Taxes and Charges Template": "Sablon Taxe (TVA)",
|
||||
"Lead Source": "Sursa Lead",
|
||||
"Sales Stage": "Etapa Vanzare",
|
||||
|
||||
# Common fields
|
||||
"Customer Name": "Nume Client",
|
||||
"Customer Type": "Tip Client",
|
||||
"Customer Group": "Grup Clienti",
|
||||
"Territory": "Teritoriu",
|
||||
"Grand Total": "Total General",
|
||||
"Net Total": "Total Net",
|
||||
"Outstanding Amount": "Suma Restanta",
|
||||
"Posting Date": "Data Emiterii",
|
||||
"Due Date": "Data Scadenta",
|
||||
"Status": "Status",
|
||||
"Currency": "Moneda",
|
||||
"Paid": "Platita",
|
||||
"Unpaid": "Neplatita",
|
||||
"Overdue": "Restanta",
|
||||
"Cancelled": "Anulata",
|
||||
"Draft": "Ciorna",
|
||||
"Submitted": "Confirmata",
|
||||
"Amount": "Suma",
|
||||
"Rate": "Pret Unitar",
|
||||
"Quantity": "Cantitate",
|
||||
"Qty": "Cant.",
|
||||
"Description": "Descriere",
|
||||
"Total": "Total",
|
||||
"Tax": "Taxa",
|
||||
"Taxes": "Taxe",
|
||||
"Discount": "Reducere",
|
||||
"Payment Type": "Tip Plata",
|
||||
"Receive": "Incasare",
|
||||
|
||||
# DiDi custom fields
|
||||
"Analysis Consumed": "Analiza Consumata",
|
||||
"Analysis Session ID": "ID Sesiune Analiza",
|
||||
"DiDi User ID": "ID Utilizator DiDi",
|
||||
"IAM Role": "Rol IAM",
|
||||
"Active Plan": "Plan Activ",
|
||||
"Plan Activation Date": "Data Activare Plan",
|
||||
"Source Form": "Formular Sursa",
|
||||
"Page Origin": "Pagina Origine",
|
||||
|
||||
# Custom DocType fields
|
||||
"Acceptance Date": "Data Acceptarii",
|
||||
"Client IP": "IP Client",
|
||||
"Terms Version": "Versiune Termeni",
|
||||
"Agreement HTML": "Continut Acord",
|
||||
"Stripe Payment Intent ID": "ID Plata Stripe",
|
||||
"Stripe Session ID": "ID Sesiune Stripe",
|
||||
"Raw Webhook Data": "Date Brute Webhook",
|
||||
"Event Type": "Tip Eveniment",
|
||||
"Page Slug": "Slug Pagina",
|
||||
"Section Key": "Cheie Sectiune",
|
||||
"Display Order": "Ordine Afisare",
|
||||
"Is Active": "Activ",
|
||||
"Content RO": "Continut RO",
|
||||
"Content EN": "Continut EN",
|
||||
"Extra Data": "Date Extra",
|
||||
"Report Title": "Titlu Raport",
|
||||
"Generated At": "Generat La",
|
||||
"Result JSON": "Rezultat JSON",
|
||||
"PDF File": "Fisier PDF",
|
||||
"Media Type": "Tip Media",
|
||||
"Component": "Componenta",
|
||||
|
||||
# Workspace & navigation
|
||||
"Home": "Acasa",
|
||||
"Settings": "Setari",
|
||||
"Search": "Cauta",
|
||||
"Help": "Ajutor",
|
||||
"Logout": "Deconectare",
|
||||
"Save": "Salveaza",
|
||||
"Submit": "Confirma",
|
||||
"Cancel": "Anuleaza",
|
||||
"Delete": "Sterge",
|
||||
"New": "Nou",
|
||||
"Edit": "Editeaza",
|
||||
"Print": "Tipareste",
|
||||
"Download": "Descarca",
|
||||
"Filter": "Filtreaza",
|
||||
"Sort By": "Sorteaza dupa",
|
||||
"Created By": "Creat de",
|
||||
"Modified By": "Modificat de",
|
||||
"Owner": "Proprietar",
|
||||
"Creation": "Data Creare",
|
||||
"Modified": "Data Modificare",
|
||||
"Actions": "Actiuni",
|
||||
"Add Row": "Adauga Rand",
|
||||
"Select All": "Selecteaza Tot",
|
||||
|
||||
# Reports
|
||||
"Balance Sheet": "Bilant",
|
||||
"Profit and Loss Statement": "Cont Profit si Pierdere",
|
||||
"General Ledger": "Registru General",
|
||||
"Trial Balance": "Balanta de Verificare",
|
||||
"Accounts Receivable": "Debitori",
|
||||
"Accounts Payable": "Creditori",
|
||||
|
||||
# CRM
|
||||
"Lead Name": "Nume Lead",
|
||||
"Email Address": "Adresa Email",
|
||||
"Phone": "Telefon",
|
||||
"Source": "Sursa",
|
||||
"Campaign": "Campanie",
|
||||
"Converted": "Convertit",
|
||||
"Do Not Contact": "Nu Contacta",
|
||||
"Replied": "Raspuns",
|
||||
"Interested": "Interesat",
|
||||
"Quotation": "Oferta",
|
||||
"Opportunity": "Oportunitate",
|
||||
|
||||
# Subscription
|
||||
"Plan Name": "Nume Plan",
|
||||
"Billing Interval": "Interval Facturare",
|
||||
"Cost": "Cost",
|
||||
"Month": "Lunar",
|
||||
"Year": "Anual",
|
||||
|
||||
# Common actions/buttons
|
||||
"Amend": "Modifica",
|
||||
"Duplicate": "Duplica",
|
||||
"Rename": "Redenumeste",
|
||||
"Reload": "Reincarca",
|
||||
"Close": "Inchide",
|
||||
"Yes": "Da",
|
||||
"No": "Nu",
|
||||
"Confirm": "Confirma",
|
||||
"Apply": "Aplica",
|
||||
"Clear": "Curata",
|
||||
"Refresh": "Actualizeaza",
|
||||
"Export": "Exporta",
|
||||
"Import": "Importa",
|
||||
|
||||
# Misc
|
||||
"Romania": "Romania",
|
||||
"Commercial": "Comercial",
|
||||
"Individual": "Persoana Fizica",
|
||||
"Company": "Companie",
|
||||
"All Item Groups": "Toate Grupurile",
|
||||
"DiDi Services": "Servicii DiDi",
|
||||
"Succeeded": "Reusita",
|
||||
"Failed": "Esuata",
|
||||
"Refunded": "Rambursata",
|
||||
"Pending": "In Asteptare",
|
||||
"Completed": "Finalizat",
|
||||
"Accepted": "Acceptat",
|
||||
"Expired": "Expirat",
|
||||
}
|
||||
|
||||
created = 0
|
||||
skipped = 0
|
||||
for source, translated in TRANSLATIONS.items():
|
||||
# Check if translation exists
|
||||
check = s.get(f"{URL}/api/resource/Translation", params={
|
||||
"filters": json.dumps([["language", "=", "ro"], ["source_text", "=", source]]),
|
||||
"fields": json.dumps(["name"]),
|
||||
"limit_page_length": 1,
|
||||
})
|
||||
existing = check.json().get("data", [])
|
||||
|
||||
if existing:
|
||||
skipped += 1
|
||||
continue
|
||||
|
||||
r = s.post(f"{URL}/api/resource/Translation", json={
|
||||
"language": "ro",
|
||||
"source_text": source,
|
||||
"translated_text": translated,
|
||||
})
|
||||
if r.status_code in (200, 201):
|
||||
created += 1
|
||||
else:
|
||||
print(f" Error: {source} -> {r.status_code}")
|
||||
|
||||
print(f" Created: {created}, Skipped (existing): {skipped}")
|
||||
|
||||
# ── 4. Clear cache to apply translations ──
|
||||
print("\n4. Clearing cache...")
|
||||
r = s.post(f"{URL}/api/method/frappe.client.clear_cache")
|
||||
print(f" Cache cleared: {r.status_code}")
|
||||
|
||||
print(f"\nDone! {created} traduceri noi adaugate.")
|
||||
print("Refresh ERPNext (Ctrl+Shift+R) pentru a vedea traducerile.")
|
||||
Loading…
Add table
Add a link
Reference in a new issue