From 53710429199db9ae76e2f425b1991db99665674f Mon Sep 17 00:00:00 2001 From: Marwan Alwali Date: Sun, 8 Dec 2024 16:20:31 +0300 Subject: [PATCH] first commit --- inventory/__pycache__/forms.cpython-311.pyc | Bin 9392 -> 9850 bytes inventory/__pycache__/models.cpython-311.pyc | Bin 26220 -> 29152 bytes inventory/__pycache__/urls.cpython-311.pyc | Bin 5961 -> 6762 bytes inventory/__pycache__/views.cpython-311.pyc | Bin 46187 -> 49017 bytes inventory/forms.py | 4 + inventory/models.py | 132 +++---- inventory/urls.py | 7 + inventory/views.py | 54 +++ locale/ar/LC_MESSAGES/django.mo | Bin 116439 -> 116588 bytes locale/ar/LC_MESSAGES/django.po | 379 ++++++++++--------- templates/customers/view_customer.html | 2 +- templates/header.html | 26 ++ templates/vendors/add_vendor.html | 19 - templates/vendors/delete_vendor.html | 15 - templates/vendors/edit_vendor.html | 14 - templates/vendors/vendor_form.html | 39 ++ templates/vendors/vendors_list.html | 47 ++- templates/vendors/view_vendor.html | 52 ++- 18 files changed, 459 insertions(+), 331 deletions(-) delete mode 100644 templates/vendors/add_vendor.html delete mode 100644 templates/vendors/delete_vendor.html delete mode 100644 templates/vendors/edit_vendor.html create mode 100644 templates/vendors/vendor_form.html diff --git a/inventory/__pycache__/forms.cpython-311.pyc b/inventory/__pycache__/forms.cpython-311.pyc index 72d6831d69c58b653e0c0c68cbc31f4a118a1600..9f8cab61fe2a8adcafad8cd87e657a0241f968bd 100644 GIT binary patch delta 362 zcmdns`OAlQIWI340}xdAho(=S$ScV>ZKHZVBNr2cJ41?S3qy+7#6D?usTA>G22F|0 za~S0mCabWCO^#tQ;0jC4OUW;C%P-2ETqtZB!jItV`KFd67I^|q_0wc4k_OU6G9W@0 zM6iPhIUsS1J+&e^r!*zCNC70I2qKg~gffU&3?!CLW)uDpUXf delta 82 zcmez6v%!;hIWI340}ymug{13D fB)OIWl`;ZxG4p0;mA{O946KY?A3#KrB2W|nQAQFz diff --git a/inventory/__pycache__/models.cpython-311.pyc b/inventory/__pycache__/models.cpython-311.pyc index 86e40de5101eeca0a5f038b4013e5f1e5b23e11c..6d58fdc5d4928ed2c31b587bb85c22c06c4e0ab1 100644 GIT binary patch delta 3479 zcma)8e@q+q6~FJCTS?Yp;ZY@mjtq;$;I^@VB#O_>mzFs zk+W%kur-q!UA47q)JCSY4oN3V}E&XHCs%d}N$Q9mASy{Je8p||CNm?z+AA9eP zGiGVozPkJPec$)J_kH*E``o+RzbC7IA@=v|_96zx5(J*mTZ!d8yqVlq9_}9?ci-*pBHTkTEG5dR`ijKKXGRIRtNggTshA}Y<2xAW zj`DFg&#j@jmT>g+6SAhgNfuDKi5;jzdpQSsM5)%MsgMlkiszRt%t~}@CN>MCL{Np*ESWpgJ za6Xo3d;Sn1^~%>rzQTEM-J|?_^&&aSTsU+p!H6KHiUMB-3SjD z<%8p2RtCp>_CA=OL|rF<^0od7<(;wDxqYa4TIm?C=k}x6l{hiJW-7z|4$l=I2#R7z z@{an$5`CZ?Kfbp$w-axoyU^i0X0``mW7k?-s8enn50YVpe~ITtP@(^U(U)dO@ryV= zi0~z4?F3({Z;kU`W28pq#JGnW#`$n!=;Q(!LYXHj7n35QL<1(UGKLidtjoJzu=y@C z&(haqV-0?%L935Ttn%mWWj*s`I_D0u*;oeIV#p#9SIhe1kV znUzb71vt-CuUiQ}VJ|vsnYYjiu(P6FTx91hmkTy?l`yh*X-1x!bM{YxkvBTw?F|H?vk^JQn^Y%IF*q3!{4qh4Cj7G@S>*!J za5yNd)M~bbuks5m2%&5x$i@BrmOd6cTckSaH{)Ay8B4h z!c=tLVc3dsa!IY-_sS@L_Ax)|9f1rEOzL+t^L3J?ZGX zvgg#bF8GBjW$jN}`;*3%t;2lvtZ6$u#U@7CL7_1U8LBbr-K`kq$S>e&vvReulD%Ys z@~^Kl%lIF!k31$8XylkT{}=y|%Gv;ZVVywa6Z0onb_7KAuPZEqPZkN_p@+JjAoK8w5HC=fW4NHoYG7qF0O0z`H3*HHN5m zV=^0lS)%k9I6zTOMI(}Gm;J8@K~adrwKbK~s3fV}6ufMuh*|45{*hU0K3rlFu`9S;Ol|@1Od-XEuEbaktdL%Ue$4`z5J17RC@tG zjZ*Fb=_E|yErSfAQwTZo&>&8)L)8Dp82uRN8L+zn#sk-;_#gvjv+^}=p9BFtp~!UOSz5Da&n!q3M_(dwb0r1|xt5rCZSe z_s{$6z`%G~R77bEVS@;`qh9_6UtIoL_q7^n$MA&o*5TEAM~Tt6^hD#7V$b*y+_4Y9 z)?fkSu(akkj;%S6!6I)=mK=iXeQUaTzb;;XCEfj^E-sjFxxHz3^NM@dvU?Zuq`Ed! z(~v$|)4qu((3#qxA!SRLvi3WSwG6ruz=HLDnZ^eGQb*Fk!Di`=Shmxc|Me5U}KFgL8Y*&bPObpwwp=oS6LMclB~bZv(9 cvq{pJB8_R%h_T^;0MK@Ox;$T{>9q&_4{)4a{{R30 delta 716 zcmYL`-%FEG7{}jdZm+DdwuPpX%_0Z$ElW#>P2HHyW++=*>c+}OrXs~^b6)fVf-d`E zq&?6@P!wI%O@y8T>!NOwK%ze&NL_Zb3KB~}y6Jp3sF(A8_&&c6=UHB%A0Np4#BAQ8 z$S>1BFg81Fw$sHK_k}Wbn0lGm6m1tB;I*m5aq?C)(7PJEK72Wz;j>; z5Wq{I4ajr5w}!roxL4EDcfRWDqP55KJ~IB1Q7b9R1P{e3#20^rXpQ#=+$NIF++EbJ z@^C;?3y=kIClDkma5iZdKRew->s%F_C8JmfYD6af-Q`gYs5Efn;rBWN@p!UYSVK>V z%K25dOXe?jFBrDTlt%s-tQPY}j#K4!RQNHV3aT2gb4!m$wLn@#rbilUF{pMDImnx(@xWA8Iebsc%&CI>3jOEij91$K(0x;{{m0?xv&5L diff --git a/inventory/__pycache__/urls.cpython-311.pyc b/inventory/__pycache__/urls.cpython-311.pyc index 5dcc25a112d0ab2a93dd97a5995a2f3fa1f698ed..4a49f5cb4423530831f6fc6036e2b4b8f5dbaeeb 100644 GIT binary patch delta 864 zcmY+BO>7cT6oq*(!$2wj1FcqLqM<;slu#FqAsQ`}R%_8BwDw0tW?E^nA`F_aDN7Pv zSnom;H!h4WG$x8k+oen61`MVNCT>k!)fhL%h40;IwZ6%m`Odj_-n*H3AN+RA^4x6h z(9kvgD7pCCvS#VlMmt{nUhz=lJg~)Y!drczJ}OKQ3?3Rh>`BI;K)T?QVFVh4=f`E; zk{7C6KRM5Geu8=*`Z)8}3)K7BA#6z(F`J}WpPJAtf$v?SS%AIQlYFUvrqgI%&|6(= zWag-pN@)C3^}|N3ZnZ7kmRF>k#Zud(LOP!-DHZ!pIuOaND8~!SCkEQ)ow_6|nOweN z-R;O0<%}Z#tE;}!y<7jgL%AUR*T}q4k#{;Dbc%ZQi28xftd{iGtCliJSW-CNI2|gL zlkc=`s*mCjdy`=tV{ekg^Dr?>a$Z*CG|p82VO=1mIr=>ay-RQOAlXln2t2j-QvG1} zQ~hZV@e!+b+XAzWfYus;DMyILHOCOucc{Nm2c4{a-r2{hsCCpYs78@h2gLx@H0oW{ zb@5P`ZGW0*cw;qM+joDYCHl6+&_^-U6vHhsym7F>#hP5K#l^OV3G0m#$T&TQ5j1BA z+@mIjW|Y9X)8iXMb5`B5VLb9A+42l+tTwoKlZ&^w`1Uz$n1s(_P)Hz8gU!_=Tt=RO zu&Y;?MV^B+<$2^Q$Z6!Ou<7y&8RTp5m2wtY0+-t($jA$Dit-}zb-3a73OVE@cXLv8W{jyR4e^%S3A22J111zb$bn`QW-nHV)TR|u3cZgvt%VdM@3n#%~p z#rIezZxps?G@blWSPe)@h-d;yClLcyQ+}ooe3Ms*XfyGfPF^Bn02IC|VgV%iL_wrG zm~0RQDPJY31(F4klf*zwZ7>-o29j(L(*}}jz~l`vZB>xDb_}eX4K5crRTq?AQMb9^ z9CCpr^dd{>6_(Hs_8@te$$!N4*j*VxY_G|N64LD6V7AZXUMPn*32xN+TJ}PGN*PSa(I~6@B*;c^6n>FS5j5VTt{a3RaLd*;qa*H7F=i4WLnM~OUuciv{8Utxdiw*YuJT&2FVN`B zhRGJgsklnnK)i?QMHPiajb#{z*ReEVX~eRE4Jt|8=!8LC1Y z{wXU~C|F{$P&R~HavY&%#B-ER^+K?-H-KS>ExULq@+(1#PL1e{6|1--A^RWC8g{XK z#5@Iv$8@0bZ-zArzA;J1QjP0Gp))Ap#@p$}WLo~7ezA`);z1GR7C_D z-k-3*mf0dzp%N}zOwK*(Z&k_At>-R zX|TInkfff$K;TxTxPewUv&3wCDI8eHf$J!^Fm4)kW{3?qSB8q>Dl$${%0L;L%|`A~ zoK<#BeQ$y6*?PZGJoA+Pu7RE}|`sYD;CNl$_exwK(zO9c?7nm)sfh703{_ zV8{F+tqzR=K>+EcdhyPDOf{-!sOkjRFS7B-tR;z!&9tkhsj39nFS6M=doqcQ&9tjw tsp16KFR5Z=YyuXtuS?D-tChsg8XKT<5;Q~EF`PY_fx@sgogi6q=06bBY?=T7 delta 87 zcmezQkLmRbCcfpoyj%=GFefH7{dMLPyOc>YcJuBn nXP720*e=Qaosoe7h!~3Rvu!@I{RSH!0}G?-2M|#d02BrQ51AVv diff --git a/inventory/forms.py b/inventory/forms.py index b31e1c39..c3455d4f 100644 --- a/inventory/forms.py +++ b/inventory/forms.py @@ -161,3 +161,7 @@ class CarRegistrationForm(forms.ModelForm): ] +class VendorForm(forms.ModelForm): + class Meta: + model = Vendor + exclude = ['dealer'] diff --git a/inventory/models.py b/inventory/models.py index da337e40..8b30724c 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -376,72 +376,72 @@ class Customer(models.Model): return f"{self.first_name}{middle} {self.last_name}" -# # Create Entity -# @receiver(post_save, sender=Dealer) -# def create_ledger_entity(sender, instance, created, **kwargs): -# if created: -# entity = EntityModel.objects.create( -# name=instance.name, -# admin=instance.user, -# address_1=instance.address, -# fy_start_month=1, -# accrual_method=True, -# depth=0, -# ) -# -# default_coa = entity.create_chart_of_accounts(assign_as_default=True, -# commit=True, -# coa_name=_("Chart of Accounts")) -# if default_coa: -# entity.populate_default_coa(activate_accounts=True, coa_model=default_coa) -# print(f"Ledger entity created for Dealer: {instance.name}") -# -# -# # # Create Vendor -# @receiver(post_save, sender=Vendor) -# def create_ledger_vendor(sender, instance, created, **kwargs): -# -# if created: -# entity = EntityModel.objects.filter(name=instance.dealer.name).first() -# -# vendor = VendorModel.objects.create( -# entity_model=entity, -# vendor_name=instance.name, -# vendor_number=instance.crn, -# address_1=instance.address, -# phone=instance.phone_number, -# tax_id_number=instance.vrn, -# active=True, -# hidden=False, -# additional_info={ -# "arabic_name": instance.arabic_name, -# "contact_person": instance.contact_person, -# }, -# ) -# -# print(f"VendorModel created for Vendor: {instance.name}") -# -# -# @receiver(post_save, sender=Customer) -# def create_customer(sender, instance, created, **kwargs): -# -# if created: -# entity = EntityModel.objects.filter(name=instance.dealer.name).first() -# name = f"{instance.first_name} {instance.middle_name} {instance.last_name}" -# -# customer = CustomerModel.objects.create( -# entity_model=entity, -# customer_name=name, -# customer_number=instance.national_id, -# address_1=instance.address, -# phone=instance.phone_number, -# email=instance.email, -# sales_tax_rate=0.15, -# ) -# -# print(f"Customer created: {name}") -# -# +# Create Entity +@receiver(post_save, sender=Dealer) +def create_ledger_entity(sender, instance, created, **kwargs): + if created: + entity = EntityModel.objects.create( + name=instance.name, + admin=instance.user, + address_1=instance.address, + fy_start_month=1, + accrual_method=True, + depth=0, + ) + + default_coa = entity.create_chart_of_accounts(assign_as_default=True, + commit=True, + coa_name=_("Chart of Accounts")) + if default_coa: + entity.populate_default_coa(activate_accounts=True, coa_model=default_coa) + print(f"Ledger entity created for Dealer: {instance.name}") + + +# # Create Vendor +@receiver(post_save, sender=Vendor) +def create_ledger_vendor(sender, instance, created, **kwargs): + + if created: + entity = EntityModel.objects.filter(name=instance.dealer.name).first() + + vendor = VendorModel.objects.update_or_create( + entity_model=entity, + vendor_name=instance.name, + vendor_number=instance.crn, + address_1=instance.address, + phone=instance.phone_number, + tax_id_number=instance.vrn, + active=True, + hidden=False, + additional_info={ + "arabic_name": instance.arabic_name, + "contact_person": instance.contact_person, + }, + ) + + print(f"VendorModel created for Vendor: {instance.name}") + + +@receiver(post_save, sender=Customer) +def create_customer(sender, instance, created, **kwargs): + + if created: + entity = EntityModel.objects.filter(name=instance.dealer.name).first() + name = f"{instance.first_name} {instance.middle_name} {instance.last_name}" + + customer = CustomerModel.objects.create( + entity_model=entity, + customer_name=name, + customer_number=instance.national_id, + address_1=instance.address, + phone=instance.phone_number, + email=instance.email, + sales_tax_rate=0.15, + ) + + print(f"Customer created: {name}") + + # # Create Item # @receiver(post_save, sender=Car) # def create_item_model(sender, instance, created, **kwargs): diff --git a/inventory/urls.py b/inventory/urls.py index 67f74e54..28a3f3dd 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -35,6 +35,13 @@ urlpatterns = [ path('customers/create/', views.CustomerCreateView.as_view(), name='customer_create'), path('customers//update/', views.CustomerUpdateView.as_view(), name='customer_update'), path('customers//delete/', views.delete_customer, name='customer_delete'), + # Vendor URLs + path('vendors', views.VendorListView.as_view(), name='vendor_list'), + path('vendors//', views.VendorDetailView.as_view(), name='vendor_detail'), + path('vendors/create/', views.VendorCreateView.as_view(), name='vendor_create'), + path('vendors//update/', views.VendorUpdateView.as_view(), name='vendor_update'), + path('vendors//delete/', views.delete_vendor, name='vendor_delete'), + # Car URLs path('cars/inventory////', diff --git a/inventory/views.py b/inventory/views.py index 93830db5..016c3bb0 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -724,3 +724,57 @@ def delete_customer(request, pk): messages.success(request, _('Customer deleted successfully.')) return redirect('customer_list') + +class VendorListView(LoginRequiredMixin, ListView): + model = models.Vendor + context_object_name = 'vendors' + paginate_by = 10 + template_name = "vendors/vendors_list.html" + + +class VendorDetailView(LoginRequiredMixin, DetailView): + model = models.Vendor + template_name = "vendors/view_vendor.html" + + +class VendorCreateView(LoginRequiredMixin, CreateView): + model = models.Vendor + form_class = forms.VendorForm + template_name = 'vendors/vendor_form.html' + success_url = reverse_lazy('vendor_list') + + def form_valid(self, form): + if form.is_valid(): + form.instance.dealer = self.request.user.dealer + form.save() + messages.success(self.request, _('Vendor created successfully.')) + return super().form_valid(form) + else: + return form.errors + + +class VendorUpdateView(LoginRequiredMixin, UpdateView): + model = models.Vendor + form_class = forms.VendorForm + template_name = 'vendors/vendor_form.html' + success_url = reverse_lazy('vendor_list') + + def form_valid(self, form): + if form.is_valid(): + form.instance.dealer = self.request.user.dealer + form.save() + messages.success(self.request, _('Vendor updated successfully.')) + return super().form_valid(form) + else: + return form.errors + + +@login_required +def delete_vendor(request, pk): + vendor = get_object_or_404(models.Vendor, pk=pk) + vendor.delete() + messages.success(request, _('Vendor deleted successfully.')) + return redirect('vendor_list') + + + diff --git a/locale/ar/LC_MESSAGES/django.mo b/locale/ar/LC_MESSAGES/django.mo index eacb5b7c5fa8308b023b4ad0016263d0d0f91a9c..606e56c93f5706738eac4ef3b6e154e53149eaee 100644 GIT binary patch delta 25628 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�XH>;usD@Nd6{n*HybLqor#8MH z(-A*w<4KsF_zp@E9O;8PVweh~Fh7xW1G}H{{p_X#Bbvh^9|77arMXwSf3CJR-JuZd%FlmT^*b{ZS2V)VO zjT-17)KZ?Y@$;wwT|>?AE^0u}F%~oYY#waoQTbJWX8$##CM5V~idw23sHGf&S#TWc z<8~hE<992T!9TDBM*L#-xHYPs_NaEcp(ZxSrjJ7PH^Ju5`i1q^OqY_N8Ev-(52GHz zC(t)Tn||JU(RvLvusaxvDK47Zkq@JY*T6U&j2h?~tc*WnGYs-xGJDhqBS@Hljc`4x zz+YG#YbKdz_E^;3evTFJFzO4&Yt(>qB%2xLMGY((wRLq+ALBhR7$;&z^e!Wyd%Oj8 zP0pb9@O#wEFQGcTiaHCAP#wL%?D!V*W46mCy$ot^E1{OUA!-2aP#urLAe@J6vDev1 zAS($wP!&#KF1&!6!9xtgG*`@sqfuK`4mE%}m=inO_*iUCd;#h~br*Fe09*j34fzT`qKK|>VJ*Fk)9saK~vO#yPz5#it1<->eNp{?d=>?xmBp^x6P(s zMXkU?^!>8ObKUGo7R*CNA=J!jq6X9uwd5^O4R%9a&*3)TiyGL6SPB=Tw)7loMQ@@8 z^cb~O?@-q|#|_qB1*316hAW{CM`P3od!i~Pq8gfo>S&pDGphbx)LA%#8t6^b1fHNK z@B-W5J5MH}`_*ffa2yG0U=r5AW!M0(qh=a&)7*+usJ*U?+RN5h5Zj|>HU-t; zD%3zfMh$2eYHN;J&)M{3uMOP8+!T0j&2r1ci=bvwAGO!baW1w&?fLJh4*o)wb8Z_0 zP#tE%Sj>%TzbbzB1@u^DE@M0|;J@Em@4m%pyS z=J(9E;JDw-7L7o)Hvu)^Db`u2GvwO%T1=_?zlDHK_2;OL4xm^WpJ-e{}WaI zmCbkVn|LbJVNGKVLajs?hF}2<#44zX)I+a2Y)3#Hb+`7m_D3}^7*%nE)r(r%88&}` zbqT7SkF0A@XJP}YpY5oDe~DU=ukN${>fod;cm@@}h+5h!HvSNGCZ3`?cyCSlzzifc zrXW2ds)H=3c5>MKJg5N_u<5ub^i5D{AJCQ6qkjI<)~0O?nWjd_ik8s$Nl4 zM-?$GHn90^FdgxZsC(ZJ^WhB4kKWG-G$n8WTVno4d`ZAW?0`3|l^%1FiLb)unDL4E zF4!Fl5?_Rc@gVB3{)WXd^iT8Sb~DsU&BetY{z3p*Nv~7rFUMI+MiFd}KcF5QvCqr{ zqc&D0-UF-Q7OajBQA-{Fw|Rgy!2-lbpwd6WNIZz)c-zMPo||hL>y!PjViQ_e`&h?g z3>6okM*bBtaOXJcjGRC%{TZx@NvLw6|CnnSfjX3Nm2^(Qn`gi&h(1*%I z>oR2!-+|fjgpFUp`NW^#TAcX8lndvv7*9L_Rj(Hgz(gE@f8bE;^e-Rb_#U&Y; zX1`|tHR7ct$@NvH}b-RG#?29$_8lrvGc=nK@TKY%*a z*HCAr+*{T^jzE{Urla{7LVT5Vzx5Z4A^oY1=Y3}yEQ<-GcR;P6iyF|!sCEvaW}1W= z*lnBs7k)%MgZDjmlfb9A7y~(C6L1acwCD90yW$|?o3JuwPvLRKVk_i-&X4?|mHH*6 z$2Xu`SdMs(R36_-G)E025i8?|*ap4d5YQ5Z`+0oddZSSBI;ca{)cOIIC%zX;<1>uL z7=Mp%Xl5}lYSig5YLmr<4nP6*bCEU^f>i!7^?me^mZqZE0f3f z7x7-~LHsdlK+Q9Ie82yjgQ{>5)o^?kkMD=ik8m9EWbA+~vwD1=CA(4OQ)e@Wtt&Pq zz5%tO|Dd)YAjsqOEnQ5IS*muZJ?)EH(hseBQ1|%`R>id0J-%O1HbkW_M}7DlMV*oR zs4aMn>d-&foQWK$Yg`32fPukYkMDu9kc4;=wxI6wWgE|w!!%SC!$@y{8sI?G6K7PaTsP*1*xsDV5~ZQVQ6Ky&0YXQ8T>fHFFxo={^^4X?5ux86gY>U6n`30Q}C zN34cha4kN>={P6Ew3|J*X}2hrA-x$kQa)P%F;=l&~Dih!O> zZBYXljjFH+)zIhGQ>dBzYV-d_-=QpE8csmpnL*!~!7P+th?>Ag48W79_P;N{{a1y% zB&b5hf@Uf6qL#dZwJmC3qfi5KZG5YZpGHmOHfqNHk)~X3)Qn5ocstYzjj-{_kzO<6 zmA2qX)PU}z29&js8F4-=Mm!qTKu64o{ZP;LL~MbdqpoF&!e)!=V-)d$sOQ0Q)C#Ue zt-x+C0Ueg_P)l?V<1lrU8AwUgDer`;*cbJLn}B-Y%(L-zSef`voQBV^Bqm0id%qJ^ z{-O09HYV=P6yx#z&ZdiXIaVd(0@lK8u^y)iw#Q1i+QzSA0`ago({W3TA-)t57>4%c0sGhRWZI90^1b|x1_AB)bd1F>P+M^WwMXx<7X}x%4;)m3Gg0{; zqxSd^s)Ku0zY-=t0(D)>p;o8^>QK(aX7ulDC!hyH$^=s|2c9Qh7GGnUk{;)4^e^Rc z_-V{JgXul|7+sn@#ZzU>$7@nqk8_0l=yK-c_yOur)+tX%xW@VnvlFjXf%~6>Kt}=^ z`6$##7o!HW4|VOnLw#KSZsX}HnkQi))ah@CdH{J*|$ppsr&L)Rr_wZC!uVfM%n%Xcy}C zoJF0P8>r{Y^D5kbJvg#dH6~yf@z&NcHhl%^Y#c@{-2=>kDXN(j$c!35Rn*?LM|C_2 zb+(qHZ$(gt@)fGQpSQZ{I21Lqs;H5*#snOJT7l0{_w_f_VJlg~tV9>o?U;hi@w7E> zO>-uOp*lW=8t^;Rz|z+;1Mn6gppGk9TVOZh{ZP;D^H>CLp{`Aq+NPm=r~$^Kwx$2tuLk;+@^&eC{|9Ymq%vfKa|FHzZ$QX;q@FUcSJJdJ!MO7Sy8sKD9 zM@y_bP~Yj!;CTES!*FN=k24Wn)XHRQXdc0(P`9fN`ab_V63|Hdp?;D{v~EVt_$TW# z)M3in$jqQTYNo9*0LSAb{Lsb&8k_vgs0oxrtyC3MKdsQ4p1>3Wsc->mAWKjyun9f5 z3r`T(gTE3V+tlOmI|!#;GxLCH+T4`ig4)|X)~nW(EzB2}DAdaJM17N**n<17)3}KQ z9ip#LpHi1?!H1|N_it%VZ7$T(6+_<>%%*p=jzoQ$&PA=vCs-H1M@=keEAwGh*xI)h z_g_o$83|E%40TE$q6YLD2V-z+k24FWqsnD#WAZDZX50=t;AGTw{nf^EwKY$?(Wnop zC8+EA6%NHz-gf5GZWOBHov0N#hFYp*)BvAZ1KXRKg`&JDPxI`YGyAoI*AHmrc*o(Hy!sRJm5xVW^Jhp$59yddzyo`W)3> z#!jYO5v)kO4rbEl|8xQx(Q@?1O{mkn6}4x3u@RoaaLnG>-22j~L(~Gbq>0!Hk6{ev z>|)xjiF$N5L#^Z_)WDZwR^9*Yz5xGb1ILkZ37cW_uI5R$1$BLrP>1U_YR})H_OL)V zbHA6N(hs7Z2e(kyHC=bpP6E~^-UDmmPE14p&c6y^svhPHWJE1#UeqZrjmqzU>Yz93 zFwH~FXdkNlIh%hEwN)8vmhz7n3=td;b|~C61y$o<*IJA5jCjg*rQ){^ro7L49gQp(c=MU5i?Yll{HskX*9~ z_ffYX#Q^ggjyTj3_s14E8Fg5bP!Fcxus{Bb8d%SP9_JzsK@Ft#AoE3~3FeFne^*m~X4^ahE4K@SGfqL@Ap=Mme+8uSxreHbTfEwrxRL2id?PVO| z@%`7Tk*I-qM-tG3$BP=sT-1`UMjfIXOO#`jx%c6yB`l8`Xme{%RK3wQ zf1OR=j~eJ%8^42^$Um40Q;udUbpHbg6vbAk!!{i?($%Qz_cLl~U!$IYMaGyPGMk{z zz(=UB=LfJAUPrA|$+2c&y;1cRpxWDo+TzRT)yQ8G(2|8Gnn!ANRE55%-viD@?d3_- z;qx13&P;9$B_55MSv}OiTcfscu1#N#8t5j}gX<*fk^N{K_rEfM;^R%iaMWQufO@u{ zwmv}}#-Iu2-p8X3YiW$a+NchPp|)%SYKx|!&cJfi0JdUD{0_C1DZSi(6$n9n6Dopw z098Pp0ewGE!QogNXJZQd1ywHzRqi2bz=0FZN*1v;MdgpMF0^jP`lNs7C7>nAImwK$ z3hL{3XVh6ZftuN6)C&A&(>;?-hry^VsDLWp0rdbIhN`y)wGyAA${j*|FSv^8*Zaf< zf~S~0uY~HT3u=brQG31swd7k+d;KNqTAf6d`x|wr0zU9KA7Vk&H>a(rM||F?9^Zc| z*%iwWe}!Fj|4V%6@%>YarPkk2hpzZE^C8k7bv+MZMSO^f7(JcSi<_}HM$Rw;Ylk|# zy;0Y1rj2hveP*0QP2@YDv~ZPxuEj&t46@EN#-sMG5$aU;N6mb_bvtV2hpa!KesOUJ z`DWvU&N3@m6qgaNkJ_T&Q1xD82F)PjY?F}}b#F_c_O2&tD~6y(JO?$PRjAW^z?zKu zV)D|)v(7R1z8LE8wnMGlFx1NKL`~!Ydey;80=jnD=6akkj6kJV$0+QKrEr!_{~C3O zZlGrLmrW0tXKqh^RQ-ymkKMMY_PsWLuFc;vkNdAvd4dGZ><(&aJo8P3Ak@tAqn5N1 zY9$)m^vo{S_cg=sdJEvSkbX-8Cp^H2lbjate-QC}z` zJ~rQK+oI0S2Ur3>Mol0YwS|5g&8K2fRQ@_I0iDu|s3+WA)Qn!B?seu(=Fr8UPHlBm zL#!bd*x#x{G0?e__*qL_OHwx;O8Hnp}1gc)}PSZ{i)Rt63 zosF(Gef&=DzaEhbNYHhd-AgUEibF z!Nb3h!WfMEk^x}5{pLy8|9~0z&zOSpk5Sk8sh5CGeX4_IsdAy7U~#ApE1(8Y-P#Cs zCfZti+4SL7uXQGB#THvvqv~z8?zVc5*}(UxkzGM`c-{Jk^>0)I?@oUx#XM8)~BaZTviPcD&AI0y=yTPz|R(Z1yTU>Tt!O8mMHgYi)rVP-j%b z15o9spxRkv^EX&`pjPCt^%VO4``_~f)W8i?#pkG*r25Kq9E`g6`A{9!z!+?5^S!9@ zGj0AV>!+vz?ZZ^~Eovg?P%E8;zJLFJg@78qgF2;8t${~Og>X~{F{lPBp+009qn3Iw z>Q;=h@dc>%mRUEVCbkpxS#S(>Xy2h%4QDuNDukm(7>8P_GN=x!q6St63t|_WJ{`4k z^H7iEji~zjZ2oc7bL2Ft+%@YnRJp)o+<#rCY{$&Ci^VA74N)JDV{jU7!>L&ExW`$9 zhj2DF`P$>G!t2&?C(K_g<~nJ9@4wu7$6Dl+`D!*6^#$eZsYvtJWI^9}oRlQ=My{-46{IuyeaNp!+Lw5hI`wRiDQ&&glv_f$1ZD2%3?vfqx0yYtkk;+dBHEM3UC^Rj zi=)K#I&T}POuPUcUnT9HFNe!(>wZF+<}~`d8YXQd`3nhWp?q=bMH7BSdSf@dWuzy> zt<$nxnn$FElV3N5yP#!OH8jlK*fP?a*S5KjHeJHwsXL6^%WBV#Mcr2?FO+vH(y#K? zC(}mMYnN?f80AaT#{wHyURS~&D8MTN;f0i$k9%-WD&H?NP3AnPN`u4fLOiDcAJNX& z6rNAse$t;4Z_0ZSd3w#VnizkX;4W_!;r9VG=DNpP)zhc0@AV-mzuR_|5Kj0qXSK+Q0*?`J;g21CbUmw%4Vc>-P4_R7O}K_-L_SeKJZwh?aR zrf=IT@EV~Cq}FxEw~Z{k*^VPWZB?UoTHahP->WBo<|chT@tN+qw!yKX4J;SQlSj!+`p)-J}Pl4Yot%LgXfXTO`!CBmDHan~bn67Qvyn~aO8 z+mdh{%GScnq|K$Bw!C)|-fr6_%b7u16UyDgJh%X3XfulNQp&!e%qNs@@IQ5W5!UDE z;uQKph*t*^Hd8T-EAoFDQ~WmZ?$p(ghV>a!o zE#Hp#0n#7YcutSovTKH1BmbwlBDTsHHI>Sp&^4c@yt}SzaE-wfdTRT>gsX@*qp$y7 zDTs%VK7zEBgcp*L)@Cjsy&3PP?%S@V`jn%@R${TpcP`&Qpy`ZyC9rfU7{U<3wP;1J zQ`nXA>B!UT1IlKy;T6P(lb=8xzFj!=Y@L;)-*i`Xi_BS(l#gxe0fZ~qn%}$Ex<%GG zL&^j-YF`hC$I#Xo`rCx5iKpSM*G$q*5H8ERB=7meZ`i!jZiDWX{B98&>n`XX;_jlV9ucvD#Io?_S82{LJ4dxQh_tDcDo)xpCGaZYKI#$Tnd}Dk49T;b z{O2aw_osf6xXHUEz0`NB^vv3!wQcRObq+P6$$f3d(UJ5@jB)_!i+Hamy%uTwtn5r9 z{3~{51po5ZtGBfx#<^eg49)W^we(6uD`hBMjCdE+D}(!}XK~MQH@sJHd_nT{Dn!jc zZ2k+%p0O>?r?-Z@FWL4Ux_x@pOJ9&zk94#u;;9s+$+NKr~9^7NKjGA?xX%M z5pwVI&dOV_3DihWf1L^6ppOdF7>jz9w@X@@vi%76C+{rw;r-T4=vykNDk&>$ z=>epcqoqIGNqvJ87LxNJ^`4MgfVS39>OJq1gj11Ti2OOkQ{g$%Vt5a9&-E=5SeD$H zytBK0{USa0+}M7hL6NjuiI(M$q>LmSO)Db^SHUfqOzCe)|Lad`FH9Z&=e(d$OY#fb zGCN4C&09YktspHQqrPAoGM^8viTIIG$Trl;R;*;>*U7Iy%PWX?;2lYLCyfoETm|CG z)T@16uyr?JE;^b|{uA;m+4Pr`Yh}Z<#Fs)_u@nU_6F$g$B^CanP&Lx@`p%6V5M5^y zDR+o<$A5TtGIQ{i_>K4gN`IqtQhw!~gYNIqQZd5cQ+76a=_ymgT{j@qQ^-9wAlMV( zCJ%^CXhF_@uTV-%r}Wn(1k*w{@-Eu^iL~~X@Hxu7a?1=1$@!YtHcEQ&H74;6qgG>g zz`$zZ2S^=GN*l_Tqwa5nTM`bU{h@?=x)%m!&6$Z(dY#8fc222i|{xfC! z(MoMbu*3GFq6f)aNcwwQPrvHQM7%BWvAplPT?S|EkdacyNF76N8&ZFxh1E35}n6HJQyHYP7Tzc0B7jCEAHTsuY=~7qkF}zEk{=?jTH|w}_<_G69rNX-R=-*@b z|8LasWx8GF<#1o!JZ*<`=GF|qU7dd~m%`6CE_eO?KX(=Q-~0#=i~Sx2>?} zufU~YSv={Mo+$1KTRMA(CuC{K5}rK!QkC!|ciQ*V_59+$@7EQcIzj1^KBc+MNqdrK zCVvpNH1`hA^ri8Uo*@6^=}BKCZC{!>yC>_?PLZB;|0N8G^h9Jfng7%KzV$miKLzfa Qaln(-Zy&!rDwg{H0MP1gQUCw| delta 25609 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 diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po index 0e3add6c..54a99afe 100644 --- a/locale/ar/LC_MESSAGES/django.po +++ b/locale/ar/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-06 19:45+0300\n" +"POT-Creation-Date: 2024-12-08 16:18+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -20,7 +20,7 @@ msgstr "" "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: api/models.py:6 inventory/models.py:122 -#: templates/inventory/car_detail.html:44 templates/inventory/car_form.html:83 +#: templates/inventory/car_detail.html:61 templates/inventory/car_form.html:83 #: templates/inventory/car_inventory.html:40 #: templates/inventory/car_list.html:67 templates/inventory/car_list.html:69 msgid "VIN" @@ -34,7 +34,12 @@ msgstr "الإنجليزية" msgid "Arabic" msgstr "العربية" -#: inventory/models.py:30 templates/vendors/vendors_list.html:30 +#: inventory/forms.py:147 inventory/models.py:284 +#: templates/inventory/car_detail.html:135 +msgid "Custom Date" +msgstr "تاريخ البطاقة الجمركية" + +#: inventory/models.py:30 templates/vendors/vendors_list.html:44 msgid "logo" msgstr "الشعار" @@ -68,7 +73,8 @@ msgid "Dealer" msgstr "المعرض" #: inventory/models.py:136 inventory/models.py:351 -#: templates/inventory/car_detail.html:91 templates/inventory/car_form.html:225 +#: templates/inventory/car_detail.html:108 +#: templates/inventory/car_form.html:225 #: venv/lib/python3.11/site-packages/django_ledger/models/bill.py:359 #: venv/lib/python3.11/site-packages/django_ledger/models/vendor.py:191 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/tags/bill_table.html:12 @@ -97,7 +103,7 @@ msgstr "السلسلة" msgid "Trim" msgstr "الفئة" -#: inventory/models.py:175 templates/inventory/car_detail.html:69 +#: inventory/models.py:175 templates/inventory/car_detail.html:86 #: templates/inventory/car_list.html:163 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/tags/bill_table.html:10 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/estimate/includes/card_estimate.html:12 @@ -108,23 +114,23 @@ msgstr "الفئة" msgid "Status" msgstr "الحالة" -#: inventory/models.py:181 templates/inventory/car_detail.html:73 +#: inventory/models.py:181 templates/inventory/car_detail.html:90 #: templates/inventory/car_form.html:243 templates/inventory/car_list.html:177 msgid "Stock Type" msgstr "نوع المخزون" -#: inventory/models.py:183 templates/inventory/car_detail.html:96 +#: inventory/models.py:183 templates/inventory/car_detail.html:113 #: templates/inventory/car_form.html:296 templates/inventory/car_list.html:200 msgid "Remarks" msgstr "ملاحظات" -#: inventory/models.py:184 templates/inventory/car_detail.html:77 +#: inventory/models.py:184 templates/inventory/car_detail.html:94 #: templates/inventory/car_form.html:260 templates/inventory/car_list.html:191 #: templates/inventory/car_list.html:192 msgid "Mileage" msgstr "عدد الكيلومترات" -#: inventory/models.py:185 templates/inventory/car_detail.html:81 +#: inventory/models.py:185 templates/inventory/car_detail.html:98 #: templates/inventory/car_form.html:278 msgid "Receiving Date" msgstr "تاريخ الاستلام" @@ -137,32 +143,32 @@ msgstr "السيارة" msgid "Cars" msgstr "السيارات" -#: inventory/models.py:234 templates/inventory/car_detail.html:123 -#: templates/inventory/car_finance_form.html:38 +#: inventory/models.py:234 templates/inventory/car_detail.html:160 +#: templates/inventory/car_finance_form.html:33 msgid "Cost Price" msgstr "سعر التكلفة" -#: inventory/models.py:235 templates/inventory/car_detail.html:127 -#: templates/inventory/car_finance_form.html:46 +#: inventory/models.py:235 templates/inventory/car_detail.html:164 +#: templates/inventory/car_finance_form.html:40 msgid "Profit Margin" msgstr "هامش الربح" -#: inventory/models.py:236 templates/inventory/car_detail.html:131 -#: templates/inventory/car_finance_form.html:62 +#: inventory/models.py:236 templates/inventory/car_detail.html:168 +#: templates/inventory/car_finance_form.html:54 msgid "Selling Price" msgstr "سعر البيع" -#: inventory/models.py:237 templates/inventory/car_detail.html:135 -#: templates/inventory/car_finance_form.html:54 +#: inventory/models.py:237 templates/inventory/car_detail.html:172 +#: templates/inventory/car_finance_form.html:47 msgid "VAT Rate" msgstr "نسبة ضريبة القيمة المضافة" -#: inventory/models.py:238 templates/inventory/car_detail.html:139 -#: templates/inventory/car_finance_form.html:66 +#: inventory/models.py:238 templates/inventory/car_detail.html:176 +#: templates/inventory/car_finance_form.html:58 msgid "VAT Amount" msgstr "مبلغ ضريبة القيمة المضافة" -#: inventory/models.py:239 templates/inventory/car_finance_form.html:70 +#: inventory/models.py:239 templates/inventory/car_finance_form.html:62 msgid "Total Amount" msgstr "المبلغ الإجمالي" @@ -179,7 +185,7 @@ msgid "Interior" msgstr "الداخلي" #: inventory/models.py:262 templates/dealers/dealer_detail.html:26 -#: templates/vendors/view_vendor.html:8 +#: templates/vendors/view_vendor.html:39 #: venv/lib/python3.11/site-packages/django_ledger/forms/coa.py:16 #: venv/lib/python3.11/site-packages/django_ledger/forms/coa.py:37 msgid "Name" @@ -193,7 +199,7 @@ msgstr "الاسم بالعربية" msgid "RGB" msgstr "آر جي بي" -#: inventory/models.py:269 templates/inventory/color_palette.html:66 +#: inventory/models.py:269 templates/inventory/color_palette.html:83 msgid "Color Type" msgstr "نوع اللون" @@ -205,15 +211,12 @@ msgstr "اللون" msgid "Colors" msgstr "الألوان" -#: inventory/models.py:283 +#: inventory/models.py:283 templates/inventory/car_detail.html:131 msgid "Custom Number" msgstr "رقم البطاقة الجمركية" -#: inventory/models.py:284 -msgid "Custom Date" -msgstr "تاريخ البطاقة الجمركية" - -#: inventory/models.py:287 +#: inventory/models.py:287 templates/inventory/car_detail.html:16 +#: templates/inventory/car_detail.html:141 msgid "Custom Card" msgstr "البطاقة الجمركية" @@ -278,7 +281,7 @@ msgstr "الاسم بالإنجليزية" #: inventory/models.py:327 inventory/models.py:347 inventory/models.py:366 #: templates/customers/view_customer.html:53 #: templates/dealers/dealer_detail.html:38 -#: templates/vendors/view_vendor.html:17 +#: templates/vendors/view_vendor.html:44 #: venv/lib/python3.11/site-packages/django_ledger/models/mixins.py:113 msgid "Phone Number" msgstr "رقم الهاتف" @@ -286,7 +289,7 @@ msgstr "رقم الهاتف" #: inventory/models.py:328 inventory/models.py:348 inventory/models.py:367 #: templates/customers/view_customer.html:54 #: templates/dealers/dealer_detail.html:42 -#: templates/vendors/view_vendor.html:19 +#: templates/vendors/view_vendor.html:46 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/customer/tags/customer_table.html:10 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/vendor/tags/vendor_table.html:11 msgid "Address" @@ -300,11 +303,13 @@ msgstr "الشعار" msgid "Dealers" msgstr "المعارض" -#: inventory/models.py:346 templates/vendors/view_vendor.html:16 +#: inventory/models.py:346 templates/vendors/view_vendor.html:43 msgid "Contact Person" msgstr "الشخص المسؤول" -#: inventory/models.py:352 +#: inventory/models.py:352 templates/header.html:85 templates/header.html:100 +#: templates/vendors/vendor_form.html:4 templates/vendors/vendors_list.html:4 +#: templates/vendors/vendors_list.html:5 msgid "Vendors" msgstr "الموردين" @@ -321,7 +326,7 @@ msgid "Last Name" msgstr "اسم العائلة" #: inventory/models.py:364 templates/customers/view_customer.html:51 -#: templates/vendors/view_vendor.html:18 +#: templates/vendors/view_vendor.html:45 #: venv/lib/python3.11/site-packages/django_ledger/models/mixins.py:111 msgid "Email" msgstr "البريد الإلكتروني" @@ -343,6 +348,12 @@ msgstr "العميل" msgid "Customers" msgstr "العملاء" +#: inventory/models.py:394 +#: venv/lib/python3.11/site-packages/django_ledger/models/accounts.py:436 +#: venv/lib/python3.11/site-packages/django_ledger/models/coa.py:152 +msgid "Chart of Accounts" +msgstr "قائمة الحسابات" + #: inventory/utils.py:25 msgid "success" msgstr "ناجحة" @@ -355,109 +366,125 @@ msgstr "خطأ" msgid "Forgot Password?" msgstr "نسيت كلمة المرور؟" -#: inventory/views.py:69 +#: inventory/views.py:68 msgid "You are not associated with any dealer." msgstr "أنت غير مرتبط بأي معرض." -#: inventory/views.py:251 templates/header.html:33 templates/index.html:20 +#: inventory/views.py:248 templates/header.html:33 templates/index.html:20 #: templates/inventory/car_inventory.html:5 #: templates/inventory/car_inventory.html:7 msgid "inventory" msgstr "المخزون" -#: inventory/views.py:373 +#: inventory/views.py:370 msgid "Car finance details saved successfully." msgstr "تم حفظ تفاصيل المالية للسيارة بنجاح." -#: inventory/views.py:391 +#: inventory/views.py:388 msgid "Car finance updated successfully." msgstr "تم تحديث التفاصيل المالية للسيارة بنجاح." -#: inventory/views.py:404 +#: inventory/views.py:401 msgid "Car updated successfully." msgstr "تم تحديث السيارة بنجاح" -#: inventory/views.py:417 +#: inventory/views.py:414 msgid "Car deleted successfully." msgstr "تم حذف السيارة بنجاح." -#: inventory/views.py:435 inventory/views.py:504 +#: inventory/views.py:434 +msgid "Custom Card added successfully." +msgstr "تم إضافة البطاقة الجمركية بنجاح." + +#: inventory/views.py:452 inventory/views.py:521 msgid "Select a Color" msgstr "اختر اللون" -#: inventory/views.py:440 +#: inventory/views.py:457 msgid "Select Color Type" msgstr "حدد نوع اللون" -#: inventory/views.py:468 inventory/views.py:532 +#: inventory/views.py:485 inventory/views.py:548 msgid "Invalid color selection." msgstr "تحديد اللون غير صالح." -#: inventory/views.py:478 +#: inventory/views.py:495 msgid "Color added successfully." msgstr "تمت إضافة اللون بنجاح." -#: inventory/views.py:539 +#: inventory/views.py:555 msgid "Exterior color updated successfully." msgstr "تم تحديث اللون الخارجي بنجاح." -#: inventory/views.py:556 +#: inventory/views.py:572 msgid "This car is already reserved." msgstr "هذه السيارة محجوزة بالفعل." -#: inventory/views.py:566 +#: inventory/views.py:582 msgid "Car reserved successfully." msgstr "تم حجز السيارة بنجاح." -#: inventory/views.py:583 +#: inventory/views.py:599 msgid "Reservation renewed successfully." msgstr "تم تجديد الحجز بنجاح" -#: inventory/views.py:588 +#: inventory/views.py:604 msgid "Reservation canceled successfully." msgstr "تم إلغاء الحجز بنجاح." -#: inventory/views.py:592 +#: inventory/views.py:608 msgid "Invalid action." msgstr "إجراء غير صالح." -#: inventory/views.py:594 +#: inventory/views.py:610 msgid "Invalid request method." msgstr "طريقة الطلب غير صالحة" -#: inventory/views.py:616 +#: inventory/views.py:632 msgid "Dealer created successfully." msgstr "تم إنشاء المعرض بنجاح." -#: inventory/views.py:627 +#: inventory/views.py:643 msgid "Dealer updated successfully." msgstr "تم تحديث المعرض بنجاح." -#: inventory/views.py:637 +#: inventory/views.py:653 msgid "Dealer deleted successfully." msgstr "تم حذف المعرض بنجاح." -#: inventory/views.py:643 templates/customers/customer_form.html:4 +#: inventory/views.py:659 templates/customers/customer_form.html:4 #: templates/customers/customer_list.html:5 #: templates/customers/customer_list.html:6 templates/header.html:59 #: templates/header.html:74 msgid "customers" msgstr "العملاء" -#: inventory/views.py:682 +#: inventory/views.py:698 msgid "Customer created successfully." msgstr "تم إنشاء العميل بنجاح." -#: inventory/views.py:698 +#: inventory/views.py:714 msgid "Customer updated successfully." msgstr "تم تحديث العميل بنجاح." -#: inventory/views.py:708 +#: inventory/views.py:724 msgid "Customer deleted successfully." msgstr "تم حذف العميل بنجاح." +#: inventory/views.py:750 +msgid "Vendor created successfully." +msgstr "تم إنشاء المورد بنجاح." + +#: inventory/views.py:766 +msgid "Vendor updated successfully." +msgstr "تم تحديث المورد بنجاح" + +#: inventory/views.py:776 +msgid "Vendor deleted successfully." +msgstr "تم حذف المورد بنجاح." + #: templates/accounts/login.html:6 templates/accounts/login.html:14 -#: templates/accounts/login.html:31 templates/header.html:105 +#: templates/accounts/login.html:31 templates/header.html:131 msgid "Sign In" msgstr "تسجيل الدخول" @@ -480,7 +507,7 @@ msgstr "أرسل لي رمز تسجيل الدخول عبر البريد الإ #: templates/accounts/logout.html:3 templates/accounts/logout.html:11 #: templates/accounts/logout.html:21 templates/dealers/dealer_detail.html:63 -#: templates/header.html:99 +#: templates/header.html:125 msgid "Sign Out" msgstr "تسجيل الخروج" @@ -547,19 +574,19 @@ msgstr "إنشاء حساب باستخدام مفتاح المرور" msgid "HAIKAL" msgstr "هيكل" -#: templates/customers/customer_form.html:15 +#: templates/customers/customer_form.html:14 msgid "Edit Customer" msgstr "تحديث العميل" -#: templates/customers/customer_form.html:18 +#: templates/customers/customer_form.html:17 msgid "Add Customer" msgstr "إضافة عميل" -#: templates/customers/customer_form.html:32 -#: templates/inventory/car_edit.html:43 templates/inventory/car_form.html:320 -#: templates/inventory/color_palette.html:85 -#: templates/inventory/color_palette_update.html:78 -#: templates/vendors/edit_vendor.html:10 +#: templates/customers/customer_form.html:31 +#: templates/inventory/add_custom_card.html:7 +#: templates/inventory/car_edit.html:41 templates/inventory/car_form.html:320 +#: templates/inventory/color_palette.html:106 +#: templates/vendors/vendor_form.html:31 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/tags/bill_item_formset.html:81 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/closing_entry/closing_entry_update.html:19 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/data_import/tags/data_import_job_txs_table.html:78 @@ -570,16 +597,27 @@ msgstr "إضافة عميل" msgid "Save" msgstr "حفظ" -#: templates/customers/customer_form.html:37 -#: templates/customers/view_customer.html:72 -#: templates/inventory/car_detail.html:248 -msgid "Back to List" -msgstr "العودة إلى القائمة" +#: templates/customers/customer_form.html:33 +#: templates/inventory/add_custom_card.html:8 +#: templates/inventory/car_confirm_delete.html:14 +#: templates/inventory/car_detail.html:266 +#: templates/inventory/car_finance_form.html:68 +#: templates/inventory/color_palette.html:107 +#: templates/inventory/reserve_car.html:30 +#: templates/vendors/vendor_form.html:33 +#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/bill_create.html:37 +#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/includes/card_bill.html:205 +#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/components/modals.html:11 +#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/components/modals_v2.html:9 +#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/invoice/includes/card_invoice.html:188 +#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/invoice/invoice_create.html:42 +#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/purchase_order/includes/card_po.html:121 +msgid "Cancel" +msgstr "إلغاء" #: templates/customers/customer_list.html:20 #: templates/inventory/car_inventory.html:29 -#: templates/inventory/car_list.html:70 templates/vendors/vendors_list.html:19 -#: templates/vendors/vendors_list.html:21 +#: templates/inventory/car_list.html:70 templates/vendors/vendors_list.html:21 msgid "search" msgstr "بحث" @@ -600,14 +638,14 @@ msgid "national ID" msgstr "رقم الهوية الوطنية" #: templates/customers/customer_list.html:46 -#: templates/vendors/vendors_list.html:32 +#: templates/vendors/vendors_list.html:46 msgid "actions" msgstr "الإجراءات" #: templates/customers/customer_list.html:59 -#: templates/inventory/car_detail.html:107 +#: templates/inventory/car_detail.html:124 #: templates/inventory/car_inventory.html:62 -#: templates/vendors/vendors_list.html:55 +#: templates/vendors/vendors_list.html:65 msgid "view" msgstr "عرض" @@ -620,11 +658,13 @@ msgid "Are you sure you want to delete this customer?" msgstr "هل أنت متأكد أنك تريد حذف هذا العميل؟" #: templates/customers/view_customer.html:26 +#: templates/vendors/view_vendor.html:25 #: venv/lib/python3.11/site-packages/django/forms/widgets.py:802 msgid "No" msgstr "لا" #: templates/customers/view_customer.html:31 +#: templates/vendors/view_vendor.html:30 #: venv/lib/python3.11/site-packages/django/forms/widgets.py:801 msgid "Yes" msgstr "نعم" @@ -634,9 +674,9 @@ msgid "Customer Details" msgstr "تفاصيل العميل" #: templates/customers/view_customer.html:61 -#: templates/inventory/car_detail.html:115 -#: templates/inventory/car_detail.html:178 -#: templates/vendors/view_vendor.html:21 +#: templates/inventory/car_detail.html:217 +#: templates/inventory/car_detail.html:291 +#: templates/vendors/view_vendor.html:48 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/customer/includes/card_customer.html:28 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/journal_entry/tags/je_table.html:83 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/ledger/tags/ledgers_table.html:101 @@ -645,8 +685,7 @@ msgid "Edit" msgstr "تحديث" #: templates/customers/view_customer.html:67 -#: templates/vendors/delete_vendor.html:11 -#: templates/vendors/view_vendor.html:22 +#: templates/vendors/view_vendor.html:53 #: venv/lib/python3.11/site-packages/django/forms/formsets.py:499 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/bill_delete.html:28 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/tags/bill_item_formset.html:25 @@ -677,6 +716,11 @@ msgstr "تحديث" msgid "Delete" msgstr "حذف" +#: templates/customers/view_customer.html:72 +#: templates/inventory/car_detail.html:293 +msgid "Back to List" +msgstr "العودة إلى القائمة" + #: templates/dealers/dealer_detail.html:5 #: templates/dealers/dealer_detail.html:14 msgid "Dealer Details" @@ -734,7 +778,7 @@ msgstr "تحديث معلومات المعرض" msgid "Save Changes" msgstr "حفظ تغيير" -#: templates/dealers/dealer_form.html:36 templates/inventory/car_edit.html:40 +#: templates/dealers/dealer_form.html:36 templates/inventory/car_edit.html:39 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bank_account/bank_account_create.html:25 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bank_account/bank_account_update.html:26 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/data_import/data_import_job_list.html:13 @@ -764,7 +808,7 @@ msgstr "جميع الحقوق محفوظة" msgid "Tenhal" msgstr "تنحل" -#: templates/header.html:25 templates/header.html:82 templates/index.html:5 +#: templates/header.html:25 templates/header.html:108 templates/index.html:5 msgid "home" msgstr "الرئيسية" @@ -784,11 +828,15 @@ msgstr "المخزون" msgid "add customer" msgstr "إضافة عميل" -#: templates/header.html:96 +#: templates/header.html:92 templates/vendors/vendor_form.html:17 +msgid "Add Vendor" +msgstr "المورد" + +#: templates/header.html:122 msgid "profile" msgstr "الملف الشخصي" -#: templates/header.html:128 +#: templates/header.html:154 msgid "Theme" msgstr "السمة" @@ -892,7 +940,7 @@ msgstr "أفضل السيارات مبيعاً" msgid "View your best-selling cars." msgstr "عرض السيارات الأكثر مبيعاً." -#: templates/index.html:151 templates/inventory/car_detail.html:57 +#: templates/index.html:151 templates/inventory/car_detail.html:74 #: templates/inventory/car_form.html:155 templates/inventory/car_list.html:97 msgid "model" msgstr "الموديل" @@ -952,65 +1000,48 @@ msgstr "الجمعة" msgid "Sat" msgstr "السبت" -#: templates/inventory/car_confirm_delete.html:14 -#: templates/inventory/car_detail.html:230 -#: templates/inventory/color_palette.html:86 -#: templates/inventory/color_palette_update.html:79 -#: templates/inventory/reserve_car.html:30 -#: templates/vendors/delete_vendor.html:12 -#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/bill_create.html:37 -#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/includes/card_bill.html:205 -#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/components/modals.html:11 -#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/components/modals_v2.html:9 -#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/invoice/includes/card_invoice.html:188 -#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/invoice/invoice_create.html:42 -#: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/purchase_order/includes/card_po.html:121 -msgid "Cancel" -msgstr "إلغاء" - -#: templates/inventory/car_detail.html:6 templates/inventory/car_detail.html:41 +#: templates/inventory/car_detail.html:6 templates/inventory/car_detail.html:58 msgid "Car Details" msgstr "تفاصيل السيارة" -#: templates/inventory/car_detail.html:21 -#: templates/inventory/car_detail.html:100 templates/inventory/car_form.html:37 +#: templates/inventory/car_detail.html:37 +#: templates/inventory/car_detail.html:117 templates/inventory/car_form.html:37 #: templates/inventory/car_form.html:316 templates/inventory/car_list.html:47 #: templates/inventory/car_list.html:221 msgid "specifications" msgstr "المواصفات" -#: templates/inventory/car_detail.html:48 templates/inventory/car_list.html:119 +#: templates/inventory/car_detail.html:65 templates/inventory/car_list.html:119 msgid "year" msgstr "السنة" -#: templates/inventory/car_detail.html:52 templates/inventory/car_form.html:137 +#: templates/inventory/car_detail.html:69 templates/inventory/car_form.html:137 #: templates/inventory/car_list.html:79 msgid "make" msgstr "الصانع" -#: templates/inventory/car_detail.html:61 templates/inventory/car_list.html:130 +#: templates/inventory/car_detail.html:78 templates/inventory/car_list.html:130 msgid "series" msgstr "السلسلة" -#: templates/inventory/car_detail.html:65 templates/inventory/car_form.html:199 +#: templates/inventory/car_detail.html:82 templates/inventory/car_form.html:199 #: templates/inventory/car_list.html:141 msgid "trim" msgstr "الفئة" -#: templates/inventory/car_detail.html:86 +#: templates/inventory/car_detail.html:103 msgid "Branch" msgstr "الفرع" -#: templates/inventory/car_detail.html:113 -#: templates/inventory/transfer_car.html:23 -msgid "transfer" -msgstr "نقل" +#: templates/inventory/car_detail.html:147 +msgid "Add" +msgstr "إضافة" -#: templates/inventory/car_detail.html:119 +#: templates/inventory/car_detail.html:156 msgid "Financial Details" msgstr "التفاصيل المالية" -#: templates/inventory/car_detail.html:143 +#: templates/inventory/car_detail.html:180 #: templates/inventory/inventory_stats.html:61 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/bill_detail.html:98 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bills/bill_detail.html:127 @@ -1029,43 +1060,43 @@ msgstr "التفاصيل المالية" msgid "Total" msgstr "الإجمالي" -#: templates/inventory/car_detail.html:149 +#: templates/inventory/car_detail.html:187 msgid "Edit Finance Details" msgstr "تعديل التفاصيل المالية" -#: templates/inventory/car_detail.html:153 +#: templates/inventory/car_detail.html:191 msgid "No finance details available." msgstr "لا توجد تفاصيل مالية متاحة." -#: templates/inventory/car_detail.html:156 +#: templates/inventory/car_detail.html:194 msgid "Add Finance Details" msgstr "إضافة التفاصيل المالية" -#: templates/inventory/car_detail.html:159 +#: templates/inventory/car_detail.html:200 msgid "Colors Details" msgstr "تفاصيل الألوان" -#: templates/inventory/car_detail.html:185 +#: templates/inventory/car_detail.html:224 msgid "No colors available for this car." msgstr "لا تتوفر ألوان لهذه السيارة." -#: templates/inventory/car_detail.html:192 +#: templates/inventory/car_detail.html:231 msgid "Get Colors" msgstr "الحصول على الألوان" -#: templates/inventory/car_detail.html:199 +#: templates/inventory/car_detail.html:238 msgid "Reservations Details" msgstr "تفاصيل الحجز" -#: templates/inventory/car_detail.html:206 +#: templates/inventory/car_detail.html:243 msgid "Reserved By" msgstr "محجوز بواسطة" -#: templates/inventory/car_detail.html:207 +#: templates/inventory/car_detail.html:244 msgid "Expires At" msgstr "ينتهي في" -#: templates/inventory/car_detail.html:208 +#: templates/inventory/car_detail.html:245 #: templates/inventory/car_inventory.html:44 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/account/tags/account_txs_table.html:29 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/account/tags/accounts_table.html:29 @@ -1093,22 +1124,27 @@ msgstr "ينتهي في" msgid "Actions" msgstr "الإجراءات" -#: templates/inventory/car_detail.html:224 +#: templates/inventory/car_detail.html:260 msgid "renew" msgstr "تجديد" -#: templates/inventory/car_detail.html:239 +#: templates/inventory/car_detail.html:277 #: templates/inventory/reserve_car.html:29 msgid "Reserve" msgstr "حجز" -#: templates/inventory/car_detail.html:305 +#: templates/inventory/car_detail.html:289 +#: templates/inventory/transfer_car.html:23 +msgid "transfer" +msgstr "نقل" + +#: templates/inventory/car_detail.html:378 #: templates/inventory/car_list.html:542 #: templates/partials/specifications_modal.html:11 msgid "No specifications available." msgstr "لا توجد مواصفات متاحة." -#: templates/inventory/car_detail.html:309 +#: templates/inventory/car_detail.html:382 #: templates/inventory/car_list.html:546 msgid "Error loading specifications." msgstr "حدث خطأ أثناء تحميل المواصفات." @@ -1125,19 +1161,19 @@ msgstr "التفاصيل المالية السيارة" msgid "Finance Details for" msgstr "التفاصيل المالية لـ" -#: templates/inventory/car_finance_form.html:41 +#: templates/inventory/car_finance_form.html:36 msgid "Please provide a valid cost price." msgstr "يرجى تقديم سعر تكلفة صالح." -#: templates/inventory/car_finance_form.html:49 +#: templates/inventory/car_finance_form.html:43 msgid "Please provide a profit margin between 0 and 100." msgstr "يجب أن يكون هامش الربح بين 0 و 100" -#: templates/inventory/car_finance_form.html:57 +#: templates/inventory/car_finance_form.html:50 msgid "Please provide a valid VAT rate." msgstr "يرجى تقديم معدل صالح لضريبة القيمة المضافة." -#: templates/inventory/car_finance_form.html:77 +#: templates/inventory/car_finance_form.html:67 msgid "Save Finance Details" msgstr "حفظ التفاصيل المالية" @@ -1250,18 +1286,13 @@ msgstr "لا توجد سيارات متاحة." msgid "Error loading options." msgstr "خطأ في تحميل الخيارات." -#: templates/inventory/color_palette.html:55 -msgid "Add Color for" -msgstr "إضافة لون الى" - -#: templates/inventory/color_palette_update.html:4 -#: templates/inventory/color_palette_update.html:54 +#: templates/inventory/color_palette.html:74 msgid "Update Color" msgstr "تحديث اللون" -#: templates/inventory/color_palette_update.html:86 -msgid "Select Color" -msgstr "اختر اللون" +#: templates/inventory/color_palette.html:77 +msgid "Add Color for" +msgstr "إضافة لون الى" #: templates/inventory/inventory_stats.html:5 msgid "Inventory Statistics" @@ -1325,69 +1356,48 @@ msgstr "الماسح الضوئي" msgid "Specifications" msgstr "المواصفات" -#: templates/vendors/add_vendor.html:3 templates/vendors/add_vendor.html:6 -msgid "Add Supplier" -msgstr "إضافة مورد" +#: templates/vendors/vendor_form.html:14 +msgid "Edit Vendor" +msgstr "تحديث المورد" -#: templates/vendors/add_vendor.html:16 -msgid "Add" -msgstr "إضافة" - -#: templates/vendors/delete_vendor.html:3 -#: templates/vendors/delete_vendor.html:6 -msgid "Delete Supplier" -msgstr "حذف المورد" - -#: templates/vendors/delete_vendor.html:7 -msgid "Are you sure you want to delete this supplier?" -msgstr "هل أنت متأكد أنك تريد حذف هذا المورد؟" - -#: templates/vendors/edit_vendor.html:3 templates/vendors/edit_vendor.html:6 -msgid "Edit Supplier" -msgstr "تعديل المورد" - -#: templates/vendors/vendors_list.html:4 templates/vendors/vendors_list.html:5 -msgid "suppliers" -msgstr "الموردون" - -#: templates/vendors/vendors_list.html:15 -msgid "add supplier" -msgstr "إضافة مورد" - -#: templates/vendors/vendors_list.html:28 +#: templates/vendors/vendors_list.html:42 msgid "name" msgstr "الاسم" -#: templates/vendors/vendors_list.html:31 +#: templates/vendors/vendors_list.html:45 msgid "address" msgstr "العنوان" -#: templates/vendors/vendors_list.html:63 -msgid "no suppliers found" +#: templates/vendors/vendors_list.html:72 +msgid "no vendors found" msgstr "لم يتم العثور على موردين" -#: templates/vendors/vendors_list.html:73 +#: templates/vendors/vendors_list.html:82 msgid "first" msgstr "الأول" -#: templates/vendors/vendors_list.html:78 +#: templates/vendors/vendors_list.html:87 msgid "previous" msgstr "السابق" -#: templates/vendors/vendors_list.html:103 +#: templates/vendors/vendors_list.html:112 msgid "next" msgstr "التالي" -#: templates/vendors/vendors_list.html:108 +#: templates/vendors/vendors_list.html:117 msgid "last" msgstr "الأخير" #: templates/vendors/view_vendor.html:3 -msgid "View Supplier" +msgid "View Vendor" msgstr "عرض المورد" -#: templates/vendors/view_vendor.html:6 -msgid "Supplier Details" +#: templates/vendors/view_vendor.html:18 +msgid "Are you sure you want to delete this vendor?" +msgstr "هل أنت متأكد أنك تريد حذف هذا المورد؟" + +#: templates/vendors/view_vendor.html:37 +msgid "Vendor Details" msgstr "تفاصيل المورد" #: templates/welcome.html:4 @@ -3554,11 +3564,6 @@ msgstr "مقفل" msgid "Active" msgstr "نشط" -#: venv/lib/python3.11/site-packages/django_ledger/models/accounts.py:436 -#: venv/lib/python3.11/site-packages/django_ledger/models/coa.py:152 -msgid "Chart of Accounts" -msgstr "قائمة الحسابات" - #: venv/lib/python3.11/site-packages/django_ledger/models/accounts.py:443 #: venv/lib/python3.11/site-packages/django_ledger/models/transactions.py:485 #: venv/lib/python3.11/site-packages/django_ledger/templates/django_ledger/bank_account/bank_account_update.html:13 diff --git a/templates/customers/view_customer.html b/templates/customers/view_customer.html index 140e9b61..00956114 100644 --- a/templates/customers/view_customer.html +++ b/templates/customers/view_customer.html @@ -4,7 +4,7 @@ {% block title %}{{ _("View Customer") }}{% endblock title %} {% block content %} - +
-{% trans "add supplier"|capfirst %} -
-
- -
- -
+
+ +
+ + + + {% if request.GET.q %} + + + + {% endif %} +
+ +
- @@ -37,11 +51,7 @@ {% for vendor in page_obj.object_list %} {% endfor %} {% else %} - + {% endif %} diff --git a/templates/vendors/view_vendor.html b/templates/vendors/view_vendor.html index aa71cb0e..cd7299bc 100644 --- a/templates/vendors/view_vendor.html +++ b/templates/vendors/view_vendor.html @@ -1,24 +1,56 @@ {% extends 'base.html' %} {% load i18n %} -{% block title %}{% trans "View Supplier" %}{% endblock title %} +{% block title %}{% trans "View Vendor" %}{% endblock title %} {% block content %} + + +
-

{% trans "Supplier Details" %}

+

{% trans "Vendor Details" %}

  • {% trans "Name" %}: - {% if request.LANGUAGE_CODE == 'ar' %} - {{ vendor.name }} - {% else %} - {{ vendor.english_name }} - {% endif %} -
  • + {{ vendor.get_local_name }} +
  • {% trans "Contact Person" %}: {{ vendor.contact_person }}
  • {% trans "Phone Number" %}: {{ vendor.phone_number }}
  • {% trans "Email" %}: {{ vendor.email }}
  • {% trans "Address" %}: {{ vendor.address }}
- {% trans "Edit" %} - {% trans "Delete" %} + {% trans "Edit" %} + + + {{ _("Delete") }} +
{% endblock %}
- {% if request.LANGUAGE_CODE == 'ar' %} - {{ vendor.name }} - {% else %} - {{ vendor.english_name }} - {% endif %} + {{ vendor.get_local_name }} {% if vendor.logo %} @@ -52,15 +62,14 @@ {{ vendor.address }} - {% trans 'view'|capfirst %} -{# {% trans 'Edit' %}#} -{# {% trans 'Delete' %}#} + {% trans 'view'|capfirst %} +
{% trans 'no suppliers found'|capfirst %}{% trans 'no vendors found'|capfirst %}