From a9dfac9b181203c4466f467108f5e24184c3029a Mon Sep 17 00:00:00 2001 From: roberto Date: Wed, 18 Jun 2014 15:50:30 +0000 Subject: [PATCH] =?UTF-8?q?Tareas=20#1349:=20Se=20arregla=20descuadre=20de?= =?UTF-8?q?=20centimos=20para=20la=20generaci=C3=B3n=20de=20varios=20recib?= =?UTF-8?q?os=20de=20una=20factura?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES2/trunk@226 b2cfbe5a-eba1-4a0c-8b32-7feea0a119f2 --- Database/scripts/factuges.sql | 1 + Resources/Logotipo-K-ingles.jpg | Bin 0 -> 38905 bytes Resources/logotipo-cmc.jpg | Bin 0 -> 104071 bytes Source/ApplicationBase/ApplicationBase.dproj | 8 +- .../Views/uEditorDatosBancariosEmpresa.dfm | 2 +- .../uProvinciasPoblacionesController.pas | 12 + .../Data/uDataModuleProvinciasPoblaciones.dfm | 4 +- .../Data/uDataModuleProvinciasPoblaciones.pas | 11 + .../srvProvinciasPoblaciones_Impl.dfm | 74 ++ .../srvProvinciasPoblaciones_Impl.pas | 37 + Source/Base/Base.dproj | 106 +- Source/Base/Utiles/uNumUtils.pas | 15 + Source/Cliente/FactuGES.dproj | 2 +- Source/Cliente/FactuGES.rc | 8 +- Source/Cliente/FactuGES.res | Bin 171984 -> 171984 bytes Source/Informes/6/en/InfAlbaranCliente.fr3 | 63 + Source/Informes/6/en/InfFacturaCliente.fr3 | 70 ++ Source/Informes/6/en/InfFacturaProforma.fr3 | 66 + Source/Informes/6/en/InfPedidoCliente.fr3 | 51 + .../Informes/6/en/InfPresupuestoCliente.fr3 | 59 + Source/Informes/8/InfFacturaCliente.fr3 | 6 +- .../uAlbaranesClienteController.pas | 2 + .../Data/uDataModuleAlbaranesCliente.dfm | 5 + .../Model/schAlbaranesClienteClient_Intf.pas | 47 +- .../Model/schAlbaranesClienteServer_Intf.pas | 55 +- .../Reports/uRptAlbaranesCliente_Server.dfm | 197 ++- .../Reports/uRptAlbaranesCliente_Server.pas | 2 +- .../Servidor/srvAlbaranesCliente_Impl.dfm | 45 +- .../Views/uEditorAlbaranCliente.dfm | 179 +-- .../Views/uViewAlbaranCliente.dfm | 66 +- .../Views/uViewAlbaranCliente.pas | 40 + .../uViewDireccionEntregaAlbaranCliente.dfm | 48 +- .../uViewDireccionEntregaAlbaranCliente.pas | 41 + .../Controller/uContactosController.pas | 9 +- .../uDireccionesContactoController.pas | 1 + .../Contactos/Data/uDataModuleAgentes.dfm | 15 + .../Contactos/Data/uDataModuleClientes.dfm | 65 +- .../Contactos/Data/uDataModuleContactos.dfm | 55 + .../Contactos/Data/uDataModuleContactos.pas | 23 +- .../Contactos/Data/uDataModuleEmpleados.dfm | 180 +-- .../Contactos/Data/uDataModuleProveedores.dfm | 23 +- .../Contactos/Model/Contactos_model.dpk | 3 +- .../Contactos/Model/Contactos_model.dproj | 23 +- .../Model/Contactos_model.identcache | Bin 1887 -> 1956 bytes .../Model/Data/uIDataModuleContactos.pas | 3 +- .../Model/schContactosClient_Intf.pas | 1080 +++++++++++++---- .../Model/schContactosServer_Intf.pas | 992 +++++++++++++-- .../Modulos/Contactos/Model/uBizContactos.pas | 1 + .../Contactos/Model/uBizEmpleadosServer.pas | 2 +- .../Modulos/Contactos/Model/uBizIdiomas.pas | 37 + .../Contactos/Model/uBizProveedoresServer.pas | 2 - .../Contactos/Servidor/srvContactos_Impl.dfm | 371 ++++-- .../Modulos/Contactos/Views/uEditorAgente.dfm | 63 +- .../Contactos/Views/uEditorCliente.dfm | 396 +++--- .../Contactos/Views/uEditorDireccion.dfm | 47 +- .../Contactos/Views/uEditorDireccion.pas | 2 + .../Contactos/Views/uEditorProveedor.dfm | 103 +- .../Modulos/Contactos/Views/uViewAgente.dfm | 168 +-- .../Modulos/Contactos/Views/uViewAgente.pas | 3 +- .../Modulos/Contactos/Views/uViewCliente.dfm | 266 ++-- .../Modulos/Contactos/Views/uViewCliente.pas | 8 +- .../Modulos/Contactos/Views/uViewContacto.dfm | 92 +- .../Modulos/Contactos/Views/uViewContacto.pas | 59 +- .../Views/uViewDireccionesEntrega.dfm | 4 + .../Views/uViewDireccionesEntrega.pas | 1 + .../Modulos/Contactos/Views/uViewEmpleado.dfm | 321 +++-- .../Modulos/Contactos/Views/uViewEmpleado.pas | 4 +- .../Contactos/Views/uViewProveedor.dfm | 391 +++--- .../Contactos/Views/uViewProveedor.pas | 11 +- .../Controller/uFacturasClienteController.pas | 15 +- .../Data/uDataModuleFacturasCliente.dfm | 5 + .../Model/schFacturasClienteClient_Intf.pas | 51 +- .../Model/schFacturasClienteServer_Intf.pas | 59 +- .../Model/uBizFacturasCliente.pas | 1 + .../Reports/uRptFacturasCliente_Server.dfm | 144 +-- .../Reports/uRptFacturasCliente_Server.pas | 2 +- .../Servidor/srvFacturasCliente_Impl.dfm | 48 +- ...ewDatosYSeleccionClienteFacturaCliente.dfm | 2 - ...ewDatosYSeleccionClienteFacturaCliente.pas | 6 +- .../Data/uDataModuleFacturasProforma.dfm | 24 +- .../FacturasProforma_Group.groupproj | 26 +- .../Model/schFacturasProformaClient_Intf.pas | 260 ++-- .../Model/schFacturasProformaServer_Intf.pas | 290 +++-- .../Model/uBizFacturasProforma.pas | 1 + .../Reports/uRptFacturasProforma_Server.dfm | 67 +- .../Reports/uRptFacturasProforma_Server.pas | 2 +- .../Servidor/srvFacturasProforma_Impl.dfm | 96 +- .../Views/uEditorFacturasProforma.pas | 4 +- ...wDatosYSeleccionClienteFacturaProforma.dfm | 2 - ...wDatosYSeleccionClienteFacturaProforma.pas | 6 +- .../Views/uViewFacturasProforma.dfm | 20 +- .../Views/uViewFacturasProforma.pas | 6 +- .../Data/uDataModulePedidosCliente.dfm | 10 + .../Model/schPedidosClienteClient_Intf.pas | 98 +- .../Model/schPedidosClienteServer_Intf.pas | 114 +- .../Reports/uRptPedidosCliente_Server.dfm | 139 ++- .../Reports/uRptPedidosCliente_Server.pas | 2 +- .../Servidor/srvPedidosCliente_Impl.dfm | 53 +- .../Views/uEditorPedidosCliente.dfm | 27 +- .../Views/uEditorPedidosCliente.pas | 10 + .../uViewDatosYSeleccionClientePedido.pas | 6 +- .../Views/uViewDireccionEntregaPedidoCli.pas | 3 +- .../Views/uViewPedidosCliente.dfm | 6 + .../Views/uViewPedidosCliente.pas | 1 + .../uPresupuestosClienteController.pas | 7 +- .../Data/PresupuestosCliente_data.dproj | 6 +- .../Data/uDataModulePresupuestosCliente.dfm | 14 +- .../schPresupuestosClienteClient_Intf.pas | 129 +- .../schPresupuestosClienteServer_Intf.pas | 141 +-- .../PresupuestosCliente_Group.groupproj | 36 +- .../uRptPresupuestosCliente_Server.dfm | 25 +- .../uRptPresupuestosCliente_Server.pas | 2 +- .../Servidor/srvPresupuestosCliente_Impl.dfm | 68 +- .../Views/uEditorPresupuestosCliente.dfm | 4 +- .../Views/uEditorPresupuestosCliente.pas | 2 +- ...uViewDatosYSeleccionClientePresupuesto.dfm | 2 - ...uViewDatosYSeleccionClientePresupuesto.pas | 4 +- .../Views/uViewPresupuestosCliente.dfm | 6 +- ...rocesoPresupuestosCliente_controller.dproj | 42 +- .../uProcesoPresupuestosClienteController.pas | 46 +- .../uGenerarAlbaranesCliFacCliUtils.pas | 1 + .../uGenerarFacProformaFacCliUtils.pas | 1 + .../uGenerarFacturasCliFacProformaUtils.pas | 6 + .../uGenerarAlbaranesCliUtils.pas | 1 + .../uGenerarFacturasProPreCliUtils.pas | 4 +- .../uGenerarPedidosCliUtils.pas | 1 + .../Controller/TiposDocumento_controller.dcu | Bin 16262 -> 16263 bytes Source/Servicios/FactuGES.RODL | 6 + Source/Servicios/FactuGES_Intf.pas | 18 + Source/Servicios/FactuGES_Invk.pas | 26 + Source/Servicios/RODLFile.res | Bin 56460 -> 56656 bytes Source/Servidor/FactuGES_Server.RES | Bin 23204 -> 23200 bytes Source/Servidor/FactuGES_Server.dpr | 22 +- Source/Servidor/FactuGES_Server.dproj | 6 +- Source/Servidor/FactuGES_Server.rc | 10 +- 135 files changed, 5973 insertions(+), 2415 deletions(-) create mode 100644 Resources/Logotipo-K-ingles.jpg create mode 100644 Resources/logotipo-cmc.jpg create mode 100644 Source/Informes/6/en/InfAlbaranCliente.fr3 create mode 100644 Source/Informes/6/en/InfFacturaCliente.fr3 create mode 100644 Source/Informes/6/en/InfFacturaProforma.fr3 create mode 100644 Source/Informes/6/en/InfPedidoCliente.fr3 create mode 100644 Source/Informes/6/en/InfPresupuestoCliente.fr3 create mode 100644 Source/Modulos/Contactos/Model/uBizIdiomas.pas diff --git a/Database/scripts/factuges.sql b/Database/scripts/factuges.sql index 53f33db..7e9e819 100644 --- a/Database/scripts/factuges.sql +++ b/Database/scripts/factuges.sql @@ -570,6 +570,7 @@ CREATE TABLE CONTACTOS ( POBLACION VARCHAR(255), PROVINCIA VARCHAR(255), CODIGO_POSTAL VARCHAR(10), + PAIS VARCHAR(255), TELEFONO_1 VARCHAR(25), TELEFONO_2 VARCHAR(25), MOVIL_1 VARCHAR(25), diff --git a/Resources/Logotipo-K-ingles.jpg b/Resources/Logotipo-K-ingles.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b362914c221ec09c08a7b6acd9ec9acb0d90bcc GIT binary patch literal 38905 zcmeFZWmKDOw=Np2Sc`j+;ts{F&=ybd;9i{I4uw+MV#P}cP`pS;f);luP@s4rxE6N` z6e(6VZ{Kgd-}kMx#u;s6N+PYiY0c=0rzJhTx3kU;X{O>o+e>SYY+CM&y ziGgwZ?(N@SZ~X6G+>r|Nm-u_}DmDcW^N=NC1F4zsGTh6c_t00pabqu&{CN0C4e0@yQ67 z$ti?bsQhXJMxd;^l;Z{|6B4O)G?GU3Qcra}sr}zdCkl(uS$Vxdvx(ZW!>5cJUgyeN zE9Ap!B4{hx^KA60#e9=F#F4iHz5QA&th*#Q7tDXEL6O?oYCzwQMc%((s*fxbfso*81d0;O{VDa4sJJ@sm3i-A|L( z+?gxfX6EZ06n;_26*29@ZU8y<4KVLwWOs`h<@3vpgS3yW3=6;Z-Ex9ch-;;44-NEx zn!4{Ptf%MPU(c~LToF3hKRfgGx!nC2T+tI7=l;>08xuqb+Q(MFpP>EG6rfmpN) z-HU&upZt<)_EP&izxy09IsS9tg-px!+`QZ+ACrsca!K()?cz-2Afv>fTx)r^&C>k$ z{q?Q0>1UTV36yr0;kCcUGY{J%CyiR`-O1&XPQLy`G?73S~N9rO`3!|xHyyA|O=>N<&= z*6;JbDx52bHB9Iym!uySJGaEgp0s@G_u$7mMU@m)V{6Q?5!FHIO1ezP1i<}18o zK)>{+vz?uH$85vgNIuwEx}*Ze${9Jo=Vy%$2*GS?1TR{c91<*0ojA!8^W;|m;R&+d zbwuhR3BMF?09XIqVlR`wwn}yU|IQ`<|Abx1D0JM1k4%dEgieq5&8=0%gEo)NBs?9m zj2kymmCm+0lq34*Nye0_EV?A0*o73IJbB`s?_3C)})#^Oz(9!ampmu+8=)i z+23_W4lQW&2xUfXBmK~n%X%zC)OA!$eSMK4zBt+Ib%7af4Sz; zYAKg_aZWL;O`qQ}ul4`WU~ ze#F@GpkiVAS9GM;YfY&u+aLYS)HeXn$FRWr>Uv2;*0h7fE^(>5G?<5*A zCND&6cw++mP9C(RvF}%z5;{knzDqhKEvd`1$U43Q3(6>K-Kf&%oZR^e=tPgJFqO+E zSZ)qL)*H+p7c|x;R2dM?Cnn#`7e&pOj=%hDTz?-D+;{dt1bt~d_4b(9ZjxGpK@l4e z82Db{WRrvVXr2BSF=@iV6Jk}EJ6|yTABbPU;_ZGIX-&kdf zewG{n3)J=NV<@U4DS5MMu1LelDMr?txKNT|r>^*FIX5~j4Dci$z2Bp~bv3#)W0!hr zC;<}Cq$nOmiBZ1snh(pYGvK9;xNm5-+=4#eH+^buPvtMlpIPU>q3Id_qid;o)aYCG zKwv_N=epayC%--Mes_M^DOEf8DbGEEy+8wYHtJ+hnr==tiYhdT$Dm&ofx~#UtK(ry zgrBC(t;zNfknnV?big|{pG!N%)!)^bE)Ll^ZUqFE2WE#N$=T|mS%;;a<J@f&~?g300cT^UCwyPufICabYq|Plb2GmX|UoZQTG) z9n1Z@F|N+Tv;2(t*Y_8XlbbSQccH?@UA4TwL}kYU>(>ZUSsvcOxckfY5Mv|0trVyfsB7_(fZ&9z!f5Atv6U%WU1!s%4A*nIA1W2E*bS36U=_5fWvLS5&=tY0vp%3CR@O2i6Y!)}>h z(Ue*Na-UP~tJE(!?u``N33q!5e`ag2@f^z`0{SZ5Ud54P3pL-RChmA$VOFab&B3YO zDmrk72u?yjJ#A^UZZOi^Ukt9VPLb4vt$>MfLp!wH1n;B=$i|7DrZ@H9A81@QNIfpn zX^f}o@brXsaa4eTdm3U_j2z)<_FTV>mdP5((};TT1|-n9UHAr%C2ic;cR~uRL;+U6 zn^(-2`wGteMBN4tfU7f{1`>+NOxIDPTKEi|nGIGGu4sx#Y`t?n-#kmdUN256T@S}&F{PLUBiOw z-uG4LhLgtyRrLu~_=2Z&WMlnFZmnpoTJf#@OC={)qU;=E#6$(BR`BMp%>H=0l;P_7 zTtVvsrUq83=N2|vb-6l0LiW%S+YHamW?LxMRsTc3cb6@)U8G!>tqEHLZzpr*Mm=7B zPPzd=;&=lO_LkVM;s-oDf-S}BBM5xeLx80;3=|j-P8iZm0mn30^Gqto8^Gl^JrRN7 zrEM4NXFtb@W;;JmwDfxZ_-9PK*P09}dflbSD|W0W6t*s{U4hE%5sLMuS6BXIB@}N( z%H*S{=q+Fzelki>ZcV_8$LQR!dNV!Lcl_TD{r3wv>3oXTR-&QgH1h>91<3Kn9f$Uu#I-`X1wj zM;rrK7&o-Bh|j$Ue3p+mvV$#K%+I8;yEkLj_;z-=UKEADweuqnd&ZPzpgxI#lP+$A z`}IK)J{Kl~v=50C?m4d93b-K17#MUfhYW%5H=;GI{H_L6wED@PGW}wM`_(7k-2CK+ zG_o#Y%1s}`CW^KGmACJP!Tlsg$Fy<6P!Ep;!+<0;?H{PaqIEKo<1O6JH~{h zA`p^mCe@eEdoTH`_C-+&HL->t6EA}YR;2Fgof+)wg7>ZqV^x*%9nL8$R#s`9=s?{X z?W|#N5yK$Hsjt|Y$)M_n&hbJIu0A<#lfnnu9z~3YpWF!7=}pGo&!I*~CUj$(N-9j} z_1%FdPGe@J!4yInvkkOAZvZp_D7#LV@J0bjG5!IQx`NaF69%W4Z%>Z|elYDrI|)EPw{pzm(X`xA-+&0Py4G$T*(xs1||?(?IgD zT(@%z!&KWe-@Ex-`I?J-wFo*N)Ke=Od0uSjnd!^|f9x_aY zIE7bhCyQT7bD)d438g_f@@D=))?&xV6L*Et>Zb5s!gI$pzu(Xs1H54Py*okh<%8|V zFp11JS(43Bh&D0*xlQu>d4jO2@{hSkg+}p)R+7s9qyj`KKdLfKl3u4Pn>z2NBEM+0 zXslXPO!8Z>g~!;=;l0*epyP|+K{!)Wb8ehDw#83&lF8x+(Wf z+n+%}rM?Ep!IOyRmXC*uq*IgE7Y+SLdn&@n-Tg?+V{KyE*=vq61+!o~`M>#*_IEpr z(c$M(4q` zJ9^-gvT`j;YGWwBMbNu*KRT#pyXywf3(kB_Zk8&>a*5LqBF+o|qS-kCKY3+!e6@_6 z0yQ9gBHeLPg6C;nH8pZ3523pkNznDvGEe2DQJ|=<28Aw*YJof(6i9+9ghF5hifHC1 z1o9*wehX~0M#3;SC%5?O0)MMPKPFI#tBakYmi2PD^Y}lA-XC;~{BT|E`YEJMD%k&s z*I~78(`LtF<7+Cz!c<%^kF4p}<5GboFZo|4Qs$w*7eKEr`SLKofAOt!!rHx!2MA3; z7RdL(e>=KSDXhs;n!jE7_xVpx-m9tN)XKS49RFj^yDPL%cj^Mo@s^{yE5dGAFSn@X z{g0wVxQqAq7hGab?t)K9brd+Fowzi|^N!tu%WD{FQ_--7xxQs1>qBh>POYz#8g7$j z`YiXei)ilNZozV=EG?MhZhUJ<*4X;4qY7i;@#>|CheqjE@2(m}$}|vJIGIH(E7efh zu+wH=$9@n>h&@8d+t~doG|~Hh`6g1vxStEkhocT9hY}zK;7kDo0`ob!Pu{Y<0nTX= z1lT|i5WrD%n&F9C!FhlBo)yo@3`n=rZI>lwkIVY(S#6z^Cb+nj-IGvsSv((=xoAVE zdP>2~84Cex)OUH=aK^w^CxnxNDEw_0Qyk#gfxqeY9m^m!zm^Jrz_gpIgh+FlXO7We z54-~LPI%DvJK3`Q7tWHcArQ`qmWAj6qyD+Z4M1Gj?2Sbk^%LPohc|$DgBR?*HdZOf ziHXUvg1xO~dPjwt%R#&G=zt>a5H-o>AiRMy3j&Wf8*k6^+Xnnm5NG2uKQ-H;{$!oP zi#^xOmQ|A%m2Y0Y7UM~_4>v3yMS18XM<;_B<=RZkI;w%O>U?~a9<7H1g5IXv)7f?gzCQ?~p(t>{ENnxnc8y!2rgnj^GKQB|y>T=-JX{i7 znUB{&65SybYd{)pt_YPNvPx6!V|+7{K{dLjx~2Cq&t#a43c=std=oKui&_ii z=m==j%U25+xNwB7b?uQf3uLe!$yXF`p)i1VWpm{XKzhK@j#i(0a-htqJB!EDsLwk? zC)TiXW^Jm$RQ2B-}KMwsjd?yvMmqqkqSeNq`?AH|@Cv|J!v zN6mJju^f|m5m6(7J#p!I8Sv^8NR2_LN{psBixhEDgV%@m{g2th{KA^E-kw7S35yJKf(f8Ta+~dGt>)DknkMa+^@&ynm-H(eyEU zn*x)`nOs=?{^@7uEuHO!NI1lw5K4VC(zp9txx$1umoLUKT3kIH3*mB?!jblTPOkOR z>3hRh4hcm|ZU;*%g*EjG`mzp>*gustxkv$1VV9+q9z0R|5gfB7zcszDF4L9xY5H@L z=DMV8+Da_=@!oh8a12t$v=cndl5uHBUqL#MJ;rqx$X-)>%9fBeMDcA~&*@>bYwZD0 zz+h2FpqSaPMbI~m$i%|-=SH53bKMF%rtMzg`qCo4_Cm@gg5jQM;~vF{yYB$uSjf8H zFIKi|>)?0V_ig~#JXFae<*%xJ?ik*)DMBJj_qSH?G-X^M8h%l76U&|<6Dd8|=gE;L z^gF`|FYHhyf*bJaHG}Gw=7Y@TQ**tTy$rMJyvgHKw$|k3Im$=atCg$|e=jLR+%kfy zc38+?Usq-8r_w6IVg5t)>hvsM2_;!!MgeI?(@YlU5-XRgo*~922T%MQt@xMMsm8(y z8k6Ze50)m<>&Gsli^5B3YVfR+K_@0|6cE8+shWunp@qzkv8LvAN{#~?<_^bR^ywMN zCeYoDNE=W#Z(zY9SV+rVzc!!Vj;rfJ+T+Jt>Cmtla1*@d?o(1bdZ;_UL62(&+3?5G z=sbClX{jK|1KNSmHNqt&L6W>)l&;$=O13^)jX9-d#@uE5!cvs)J>_kU8W7Yyqpl#w z1_XVP7`^tQDn%qkIEi0S(J?dWsjX-wJrrLzS`)6Ea_#iqPoGDuZ&AlfUQ$_xbjD>f z(*3uk{JH&q8qLc`y&*_`i4DQBUrH`lDc5&{o#!sdR+?r>%i$`;fsD!UIRRD6eih!2 zzde;8<*4nY=<}dMT%D`j=2eQVu2l`$^WxTxC-3J;U%<11!-qgKHh5W($ECI0$_az1jqs~_5rph%pn33zlVj(y3GLmc-GyIaJr{s z9PBt5!ltMs@B7{zD75X&-W zMfO$Fuv5J*qA^gMLeI%T44OP>_kCk5%oO-T@6d@5Cw{sb&XJ-l(xavIpAF(~2k%)g z&txYPx}9bh_&k@tL`mWML>=rBx>&c?OuR1`5Pn>w5en1iHgaiFu#2`gf6}M?@L>~K zqP{T`2eq;$Cco=*2LIyCx&r>95P4V%!BI7P-E*;NQ!oT|#FP9O5fkggBIJ1)+g9Mp zUQj)+f05GsxEL(xS|cT(h&HV$O!wUGU`Xi&Wx}4)bW6p0XKr)l#^yzHd2{7O(|33y z^CHO^l!!b@g~AloS;vB<93X5TP04r{ykV;w60sRG!yAva5^rfBMp1kFpz-?Bj(&X< z_a$Y7P8b_Dg^buLdtsp+ePN$Ck5H&J*V4+_{saqzO+G5#8*s;F-rUq^RLPMWisbBNbQ_ShGU*jNR?+#mwIr_92q|{EM`TO)>WGeV zXze{?Pwd9UhSY4bL`!rg z3Kft;Cs}3JSpqev)r~zdAEV3FqL^npG`m)+!(nKiGx=38K_l7i`uyCuWJ0Di-fzhx zJEeM-pR63=k^_39OX)^$Q$+}JLQuSo!| z86HmH87}R!oR25Zi`Ok=bjy9%qK8{sn+Cq~ST2rbnf6tAWv%sve=Eq^JE!5v?JN5r1pMPYARz$nlPeHD8M7WfqJ^ zuem1%agNz=_sSE}O1x1j^HbP+7>sd`vOgYZfWxq5A1j<*`&xPcV<@Y*H-G8TRX-

PNiZMoVA(vweb6N!r4}Z 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 OpV8^SHOv8kfB)Gg3f&q2 literal 0 HcmV?d00001 diff --git a/Resources/logotipo-cmc.jpg b/Resources/logotipo-cmc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..956ad530c1475cbc2d7637414e5bec081d541ca3 GIT binary patch literal 104071 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 MainSource - - - - + + + + diff --git a/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.dfm b/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.dfm index 18d94be..5e7ae00 100644 --- a/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.dfm +++ b/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.dfm @@ -97,7 +97,7 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa Width = 78 Height = 13 AutoSize = False - Caption = 'BIC:' + Caption = 'BIC / SWIFT:' end object eNombre: TDBEdit Left = 109 diff --git a/Source/ApplicationBase/ProvinciasPoblaciones/Controller/uProvinciasPoblacionesController.pas b/Source/ApplicationBase/ProvinciasPoblaciones/Controller/uProvinciasPoblacionesController.pas index 7a29f39..a22b2b8 100644 --- a/Source/ApplicationBase/ProvinciasPoblaciones/Controller/uProvinciasPoblacionesController.pas +++ b/Source/ApplicationBase/ProvinciasPoblaciones/Controller/uProvinciasPoblacionesController.pas @@ -10,6 +10,7 @@ uses type IProvinciasPoblacionesController = interface(IControllerBase) ['{777EDE6C-DAB6-4D96-BA57-AE3DAF8A3F78}'] + function DarListaPaises : TStringList; function DarListaProvincias : TStringList; function DarListaPoblaciones (const AID_Provincia : Integer) : TStringList; end; @@ -18,6 +19,7 @@ type protected FDataModule : IDataModuleProvinciasPoblaciones; public + function DarListaPaises : TStringList; function DarListaProvincias : TStringList; function DarListaPoblaciones (const AID_Provincia : Integer) : TStringList; destructor Destroy; override; @@ -37,6 +39,16 @@ begin FDataModule := TDataModuleProvinciasPoblaciones.Create(NIL); end; +function TProvinciasPoblacionesController.DarListaPaises: TStringList; +begin + ShowHourglassCursor; + try + Result := FDataModule.DarListaPaises; + finally + HideHourglassCursor; + end; +end; + function TProvinciasPoblacionesController.DarListaPoblaciones( const AID_Provincia: Integer): TStringList; begin diff --git a/Source/ApplicationBase/ProvinciasPoblaciones/Data/uDataModuleProvinciasPoblaciones.dfm b/Source/ApplicationBase/ProvinciasPoblaciones/Data/uDataModuleProvinciasPoblaciones.dfm index d02b807..cad0dc3 100644 --- a/Source/ApplicationBase/ProvinciasPoblaciones/Data/uDataModuleProvinciasPoblaciones.dfm +++ b/Source/ApplicationBase/ProvinciasPoblaciones/Data/uDataModuleProvinciasPoblaciones.dfm @@ -1,7 +1,5 @@ -object DataModuleProvinciasPoblaciones: TDataModuleProvinciasPoblaciones +inherited DataModuleProvinciasPoblaciones: TDataModuleProvinciasPoblaciones OldCreateOrder = False - Height = 150 - Width = 215 object RORemoteService: TRORemoteService Message = dmConexion.ROMessage Channel = dmConexion.ROChannel diff --git a/Source/ApplicationBase/ProvinciasPoblaciones/Data/uDataModuleProvinciasPoblaciones.pas b/Source/ApplicationBase/ProvinciasPoblaciones/Data/uDataModuleProvinciasPoblaciones.pas index 5467fc7..19a4895 100644 --- a/Source/ApplicationBase/ProvinciasPoblaciones/Data/uDataModuleProvinciasPoblaciones.pas +++ b/Source/ApplicationBase/ProvinciasPoblaciones/Data/uDataModuleProvinciasPoblaciones.pas @@ -8,6 +8,7 @@ uses type IDataModuleProvinciasPoblaciones = interface ['{E73DB3C4-BC57-44E8-A64B-F86AE2DCB7D6}'] + function DarListaPaises : TStringList; function DarListaProvincias : TStringList; function DarListaPoblaciones (const AID_Provincia : Integer) : TStringList; end; @@ -15,6 +16,7 @@ type TDataModuleProvinciasPoblaciones = class(TDataModuleBase, IDataModuleProvinciasPoblaciones) RORemoteService: TRORemoteService; public + function DarListaPaises : TStringList; function DarListaProvincias : TStringList; function DarListaPoblaciones (const AID_Provincia : Integer) : TStringList; end; @@ -28,6 +30,15 @@ uses { TDataModuleProvinciasPoblaciones } +function TDataModuleProvinciasPoblaciones.DarListaPaises: TStringList; +var + ABinary : Binary; +begin + ABinary := (RORemoteService as IsrvProvinciasPoblaciones).DarListaPaises; + Result := TStringList.Create; + Result.LoadFromStream(ABinary); +end; + function TDataModuleProvinciasPoblaciones.DarListaPoblaciones( const AID_Provincia: Integer): TStringList; var diff --git a/Source/ApplicationBase/ProvinciasPoblaciones/Servidor/srvProvinciasPoblaciones_Impl.dfm b/Source/ApplicationBase/ProvinciasPoblaciones/Servidor/srvProvinciasPoblaciones_Impl.dfm index 6565304..6865569 100644 --- a/Source/ApplicationBase/ProvinciasPoblaciones/Servidor/srvProvinciasPoblaciones_Impl.dfm +++ b/Source/ApplicationBase/ProvinciasPoblaciones/Servidor/srvProvinciasPoblaciones_Impl.dfm @@ -5,6 +5,80 @@ object srvProvinciasPoblaciones: TsrvProvinciasPoblaciones object schProvinciasPoblaciones: TDASchema ConnectionManager = dmServer.ConnectionManager Datasets = < + item + Params = <> + Statements = < + item + ConnectionType = 'Interbase' + Default = True + TargetTable = 'PAISES' + Name = 'IBX' + SQL = + 'SELECT '#10' ID, ISO_NUM, ISO_DES1, ISO_DES2, DESCRIPCION, ACTIVO' + + #10' FROM'#10' PAISES'#10' WHERE (ACTIVO = 1)'#10 + StatementType = stSQL + ColumnMappings = < + item + DatasetField = 'ID' + TableField = 'ID' + end + item + DatasetField = 'ISO_NUM' + TableField = 'ISO_NUM' + end + item + DatasetField = 'ISO_DES1' + TableField = 'ISO_DES1' + end + item + DatasetField = 'ISO_DES2' + TableField = 'ISO_DES2' + end + item + DatasetField = 'DESCRIPCION' + TableField = 'DESCRIPCION' + end + item + DatasetField = 'ACTIVO' + TableField = 'ACTIVO' + end> + end> + Name = 'Paises' + Fields = < + item + Name = 'ID' + DataType = datInteger + Required = True + InPrimaryKey = True + end + item + Name = 'ISO_NUM' + DataType = datInteger + Required = True + end + item + Name = 'ISO_DES1' + DataType = datString + Size = 2 + Required = True + end + item + Name = 'ISO_DES2' + DataType = datString + Size = 3 + Required = True + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 255 + Required = True + end + item + Name = 'ACTIVO' + DataType = datSmallInt + end> + end item IsPublic = False Params = <> diff --git a/Source/ApplicationBase/ProvinciasPoblaciones/Servidor/srvProvinciasPoblaciones_Impl.pas b/Source/ApplicationBase/ProvinciasPoblaciones/Servidor/srvProvinciasPoblaciones_Impl.pas index a71d13d..b9875c5 100644 --- a/Source/ApplicationBase/ProvinciasPoblaciones/Servidor/srvProvinciasPoblaciones_Impl.pas +++ b/Source/ApplicationBase/ProvinciasPoblaciones/Servidor/srvProvinciasPoblaciones_Impl.pas @@ -26,6 +26,7 @@ type private protected { IsrvProvinciasPoblaciones methods } + function DarListaPaises: Binary; function DarListaProvincias: Binary; function DarListaPoblaciones(const ID_Provincia: Integer): Binary; end; @@ -80,6 +81,42 @@ begin end; end; +function TsrvProvinciasPoblaciones.DarListaPaises: Binary; +var + ASchema : TDASchema; + AConn : IDAConnection; + dsData: IDADataset; + ALista : TStringList; +begin + Result := Binary.Create; + + ASchema := schProvinciasPoblaciones; + AConn := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionManager.GetDefaultConnectionName); + + try + dsData := ASchema.NewDataset(AConn, 'Paises'); + except + RaiseError('No existe la tabla PAISES'); + end; + + ALista := TStringList.Create; + try + dsData.Active := True; + ALista.Sorted := True; + while not dsData.EOF do + begin + ALista.Add(Format('%s=%s', [dsData.Fields[4].AsString, dsData.Fields[2].AsString])); + dsData.Next; + end; + + ALista.SaveToStream(Result); + finally + FreeANDNIL(ALista); + dsData := NIL; + AConn := NIL; + end; +end; + function TsrvProvinciasPoblaciones.DarListaPoblaciones(const ID_Provincia: Integer): Binary; var ASchema : TDASchema; diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj index 1035ed3..6e90b8b 100644 --- a/Source/Base/Base.dproj +++ b/Source/Base/Base.dproj @@ -45,8 +45,6 @@ Package FalseTrueFalseLibreria base de FactuGESFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0 - - Microsoft Office 2000 Sample Automation Server Wrapper Components Microsoft Office XP Sample Automation Server Wrapper Components Base.dpk @@ -60,63 +58,63 @@

DataModuleImpresiones TDataModule - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DataModuleRegistroCorreos
TDataModule
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fConfigurarConexion
TForm diff --git a/Source/Base/Utiles/uNumUtils.pas b/Source/Base/Utiles/uNumUtils.pas index aa75542..569083d 100644 --- a/Source/Base/Utiles/uNumUtils.pas +++ b/Source/Base/Utiles/uNumUtils.pas @@ -28,12 +28,27 @@ interface Function IntToLetras(Numero:LongInt):String; Function xxIntToLetras(Valor:LongInt):String; Function CifraToLetras(Cifra: Double): String; +function RoundCurrency(const Value: Currency): Currency; implementation uses SysUtils, Dialogs; // SysUtils, Windows, Dialogs, Messages, Classes, Graphics, Controls, Forms, StdCtrls; +function RoundCurrency(const Value: Currency): Currency; +var + V64: Int64 absolute Result; + Decimals: Integer; +begin + Result := Value; + Decimals := V64 mod 100; + Dec(V64, Decimals); + case Decimals of + -99 .. -50 : Dec(V64, 100); + 50 .. 99 : Inc(V64, 100); + end; +end; + Function xxIntToLetras(Valor:LongInt):String; const aUnitat : array[1..15] of String = ('UNO','DOS','TRES','CUATRO','CINCO','SEIS', diff --git a/Source/Cliente/FactuGES.dproj b/Source/Cliente/FactuGES.dproj index 38530e8..d9033b4 100644 --- a/Source/Cliente/FactuGES.dproj +++ b/Source/Cliente/FactuGES.dproj @@ -53,7 +53,7 @@ Delphi.Personality VCLApplication -FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse4390FalseFalseFalseFalseFalse30821252Rodax Software S.L.4.3.9.0FactuGESFactuGES4.3.9.0FactuGES.dprFalse +FalseTrueFalseC:\Archivos de programa\Borland\Delphi7\Bin\TrueFalse4400FalseFalseFalseFalseFalse30821252Rodax Software S.L.4.4.0.0FactuGESFactuGES4.4.0.0FactuGES.dprFalse diff --git a/Source/Cliente/FactuGES.rc b/Source/Cliente/FactuGES.rc index e6c3d0d..3c98570 100644 --- a/Source/Cliente/FactuGES.rc +++ b/Source/Cliente/FactuGES.rc @@ -1,7 +1,7 @@ MAINICON ICON "C:\Codigo\Resources\Iconos\Factuges.ico" 1 VERSIONINFO -FILEVERSION 4,3,9,0 -PRODUCTVERSION 4,3,9,0 +FILEVERSION 4,4,0,0 +PRODUCTVERSION 4,4,0,0 FILEFLAGSMASK 0x3FL FILEFLAGS 0x00L FILEOS 0x40004L @@ -13,10 +13,10 @@ BEGIN BLOCK "0C0A04E4" BEGIN VALUE "CompanyName", "Rodax Software S.L.\0" - VALUE "FileVersion", "4.3.9.0\0" + VALUE "FileVersion", "4.4.0.0\0" VALUE "InternalName", "FactuGES\0" VALUE "ProductName", "FactuGES\0" - VALUE "ProductVersion", "4.3.9.0\0" + VALUE "ProductVersion", "4.4.0.0\0" END END BLOCK "VarFileInfo" diff --git a/Source/Cliente/FactuGES.res b/Source/Cliente/FactuGES.res index c511d4bd846a39e359cf4c8b1628370f8a485be6..82377558003e38991b3c1eb2f9acd7b31c395945 100644 GIT binary patch delta 56 zcmcbxpX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/6/en/InfFacturaCliente.fr3 b/Source/Informes/6/en/InfFacturaCliente.fr3 new file mode 100644 index 0000000..1393749 --- /dev/null +++ b/Source/Informes/6/en/InfFacturaCliente.fr3 @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/6/en/InfFacturaProforma.fr3 b/Source/Informes/6/en/InfFacturaProforma.fr3 new file mode 100644 index 0000000..bd0e87f --- /dev/null +++ b/Source/Informes/6/en/InfFacturaProforma.fr3 @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/6/en/InfPedidoCliente.fr3 b/Source/Informes/6/en/InfPedidoCliente.fr3 new file mode 100644 index 0000000..34d163f --- /dev/null +++ b/Source/Informes/6/en/InfPedidoCliente.fr3 @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/6/en/InfPresupuestoCliente.fr3 b/Source/Informes/6/en/InfPresupuestoCliente.fr3 new file mode 100644 index 0000000..23de16e --- /dev/null +++ b/Source/Informes/6/en/InfPresupuestoCliente.fr3 @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/8/InfFacturaCliente.fr3 b/Source/Informes/8/InfFacturaCliente.fr3 index 564a907..4768d4a 100644 --- a/Source/Informes/8/InfFacturaCliente.fr3 +++ b/Source/Informes/8/InfFacturaCliente.fr3 @@ -1,5 +1,5 @@ - + @@ -12,7 +12,7 @@ - + @@ -35,6 +35,7 @@ + @@ -46,7 +47,6 @@ - diff --git a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas index 0d15694..f6a7531 100644 --- a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas +++ b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas @@ -423,6 +423,7 @@ begin AAlbaran.POBLACION := ADireccionEnvio.POBLACION; AAlbaran.CODIGO_POSTAL := ADireccionEnvio.CODIGO_POSTAL; AAlbaran.PROVINCIA := ADireccionEnvio.PROVINCIA; + AAlbaran.PAIS := ADireccionEnvio.PAIS; AAlbaran.TELEFONO := ADireccionEnvio.TELEFONO; AAlbaran.PERSONA_CONTACTO := ADireccionEnvio.PERSONA_CONTACTO; @@ -1200,6 +1201,7 @@ begin AAlbaran.DataTable.FieldByName(fld_AlbaranesClientePOBLACION).Clear; AAlbaran.DataTable.FieldByName(fld_AlbaranesClienteCODIGO_POSTAL).Clear; AAlbaran.DataTable.FieldByName(fld_AlbaranesClientePROVINCIA).Clear; + AAlbaran.DataTable.FieldByName(fld_AlbaranesClientePAIS).Clear; AAlbaran.DataTable.FieldByName(fld_AlbaranesClienteTELEFONO).Clear; if not bEnEdicion then diff --git a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm index 806fef2..7ddae8f 100644 --- a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm +++ b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm @@ -326,6 +326,11 @@ inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente item Name = 'BLOQUEADO' DataType = datSmallInt + end + item + Name = 'PAIS' + DataType = datString + Size = 255 end> Params = <> StreamingOptions = [soDisableEventsWhileStreaming] diff --git a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas index aee3e85..8cfb00d 100644 --- a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas +++ b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas @@ -9,9 +9,9 @@ const { Data table rules ids Feel free to change them to something more human readable but make sure they are unique in the context of your application } - RID_ListaAnosAlbaranes = '{97E74705-E58C-4C35-8BD8-4FB92B071A41}'; - RID_AlbaranesCliente = '{C7D38181-D27A-4E22-8F3C-A75AC30C5415}'; - RID_AlbaranesCliente_Detalles = '{CD08D967-9833-4D28-85E1-44C419A73C09}'; + RID_ListaAnosAlbaranes = '{03DAEDC7-C84E-4A87-A22E-9DAD97D43FCF}'; + RID_AlbaranesCliente = '{EE2C2D99-4B20-4384-BADD-AD7D67C97868}'; + RID_AlbaranesCliente_Detalles = '{67AC6DA8-13FF-41B0-B4ED-91A0414CFA2D}'; { Data table names } nme_ListaAnosAlbaranes = 'ListaAnosAlbaranes'; @@ -74,6 +74,7 @@ const fld_AlbaranesClienteNUM_COPIAS = 'NUM_COPIAS'; fld_AlbaranesClienteNUM_CORREOS = 'NUM_CORREOS'; fld_AlbaranesClienteBLOQUEADO = 'BLOQUEADO'; + fld_AlbaranesClientePAIS = 'PAIS'; { AlbaranesCliente field indexes } idx_AlbaranesClienteID = 0; @@ -125,6 +126,7 @@ const idx_AlbaranesClienteNUM_COPIAS = 46; idx_AlbaranesClienteNUM_CORREOS = 47; idx_AlbaranesClienteBLOQUEADO = 48; + idx_AlbaranesClientePAIS = 49; { AlbaranesCliente_Detalles fields } fld_AlbaranesCliente_DetallesID = 'ID'; @@ -165,7 +167,7 @@ const type { IListaAnosAlbaranes } IListaAnosAlbaranes = interface(IDAStronglyTypedDataTable) - ['{7BF69765-6C17-4529-8B77-AE37159DABE2}'] + ['{8E4D7304-1E61-4D01-B63C-88061AE62045}'] { Property getters and setters } function GetANOValue: String; procedure SetANOValue(const aValue: String); @@ -200,7 +202,7 @@ type { IAlbaranesCliente } IAlbaranesCliente = interface(IDAStronglyTypedDataTable) - ['{BD3E70CF-6C9E-4DEF-B2C5-111B4354674D}'] + ['{BAF2587E-A293-4C76-9392-32A6DC8D09E9}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -396,6 +398,10 @@ type procedure SetBLOQUEADOValue(const aValue: SmallInt); function GetBLOQUEADOIsNull: Boolean; procedure SetBLOQUEADOIsNull(const aValue: Boolean); + function GetPAISValue: String; + procedure SetPAISValue(const aValue: String); + function GetPAISIsNull: Boolean; + procedure SetPAISIsNull(const aValue: Boolean); { Properties } @@ -497,6 +503,8 @@ type property NUM_CORREOSIsNull: Boolean read GetNUM_CORREOSIsNull write SetNUM_CORREOSIsNull; property BLOQUEADO: SmallInt read GetBLOQUEADOValue write SetBLOQUEADOValue; property BLOQUEADOIsNull: Boolean read GetBLOQUEADOIsNull write SetBLOQUEADOIsNull; + property PAIS: String read GetPAISValue write SetPAISValue; + property PAISIsNull: Boolean read GetPAISIsNull write SetPAISIsNull; end; { TAlbaranesClienteDataTableRules } @@ -702,6 +710,10 @@ type procedure SetBLOQUEADOValue(const aValue: SmallInt); virtual; function GetBLOQUEADOIsNull: Boolean; virtual; procedure SetBLOQUEADOIsNull(const aValue: Boolean); virtual; + function GetPAISValue: String; virtual; + procedure SetPAISValue(const aValue: String); virtual; + function GetPAISIsNull: Boolean; virtual; + procedure SetPAISIsNull(const aValue: Boolean); virtual; { Properties } property ID: Integer read GetIDValue write SetIDValue; @@ -802,6 +814,8 @@ type property NUM_CORREOSIsNull: Boolean read GetNUM_CORREOSIsNull write SetNUM_CORREOSIsNull; property BLOQUEADO: SmallInt read GetBLOQUEADOValue write SetBLOQUEADOValue; property BLOQUEADOIsNull: Boolean read GetBLOQUEADOIsNull write SetBLOQUEADOIsNull; + property PAIS: String read GetPAISValue write SetPAISValue; + property PAISIsNull: Boolean read GetPAISIsNull write SetPAISIsNull; public constructor Create(aDataTable: TDADataTable); override; @@ -811,7 +825,7 @@ type { IAlbaranesCliente_Detalles } IAlbaranesCliente_Detalles = interface(IDAStronglyTypedDataTable) - ['{C04F5C39-EDA5-480C-8A9D-AE3C282D097D}'] + ['{FD39F0DD-9D93-41C2-A10E-AE78DDB72EA0}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -2113,6 +2127,27 @@ begin DataTable.Fields[idx_AlbaranesClienteBLOQUEADO].AsVariant := Null; end; +function TAlbaranesClienteDataTableRules.GetPAISValue: String; +begin + result := DataTable.Fields[idx_AlbaranesClientePAIS].AsString; +end; + +procedure TAlbaranesClienteDataTableRules.SetPAISValue(const aValue: String); +begin + DataTable.Fields[idx_AlbaranesClientePAIS].AsString := aValue; +end; + +function TAlbaranesClienteDataTableRules.GetPAISIsNull: boolean; +begin + result := DataTable.Fields[idx_AlbaranesClientePAIS].IsNull; +end; + +procedure TAlbaranesClienteDataTableRules.SetPAISIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_AlbaranesClientePAIS].AsVariant := Null; +end; + { TAlbaranesCliente_DetallesDataTableRules } constructor TAlbaranesCliente_DetallesDataTableRules.Create(aDataTable: TDADataTable); diff --git a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas index 0b362d7..0356770 100644 --- a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas +++ b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas @@ -9,14 +9,14 @@ const { Delta rules ids Feel free to change them to something more human readable but make sure they are unique in the context of your application } - RID_ListaAnosAlbaranesDelta = '{9E9C7882-2EDF-423A-8B9F-22368EA2C950}'; - RID_AlbaranesClienteDelta = '{C0D2EB08-F338-466A-BF04-1A86B1F4DB68}'; - RID_AlbaranesCliente_DetallesDelta = '{A979524D-4C7B-4853-9AE2-EF0FEB0F920B}'; + RID_ListaAnosAlbaranesDelta = '{716CDFC8-9A78-48CE-A9EA-9D18F891CB8E}'; + RID_AlbaranesClienteDelta = '{C2C37F78-792A-4EB7-A9DA-2C2095DFDB6F}'; + RID_AlbaranesCliente_DetallesDelta = '{F4ADE8A0-DE1F-41FF-96C0-F9E986830529}'; type { IListaAnosAlbaranesDelta } IListaAnosAlbaranesDelta = interface(IListaAnosAlbaranes) - ['{9E9C7882-2EDF-423A-8B9F-22368EA2C950}'] + ['{716CDFC8-9A78-48CE-A9EA-9D18F891CB8E}'] { Property getters and setters } function GetOldANOValue : String; @@ -50,7 +50,7 @@ type { IAlbaranesClienteDelta } IAlbaranesClienteDelta = interface(IAlbaranesCliente) - ['{C0D2EB08-F338-466A-BF04-1A86B1F4DB68}'] + ['{C2C37F78-792A-4EB7-A9DA-2C2095DFDB6F}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -101,6 +101,7 @@ type function GetOldNUM_COPIASValue : SmallInt; function GetOldNUM_CORREOSValue : SmallInt; function GetOldBLOQUEADOValue : SmallInt; + function GetOldPAISValue : String; { Properties } property OldID : Integer read GetOldIDValue; @@ -152,6 +153,7 @@ type property OldNUM_COPIAS : SmallInt read GetOldNUM_COPIASValue; property OldNUM_CORREOS : SmallInt read GetOldNUM_CORREOSValue; property OldBLOQUEADO : SmallInt read GetOldBLOQUEADOValue; + property OldPAIS : String read GetOldPAISValue; end; { TAlbaranesClienteBusinessProcessorRules } @@ -455,6 +457,12 @@ type function GetOldBLOQUEADOIsNull: Boolean; virtual; procedure SetBLOQUEADOValue(const aValue: SmallInt); virtual; procedure SetBLOQUEADOIsNull(const aValue: Boolean); virtual; + function GetPAISValue: String; virtual; + function GetPAISIsNull: Boolean; virtual; + function GetOldPAISValue: String; virtual; + function GetOldPAISIsNull: Boolean; virtual; + procedure SetPAISValue(const aValue: String); virtual; + procedure SetPAISIsNull(const aValue: Boolean); virtual; { Properties } property ID : Integer read GetIDValue write SetIDValue; @@ -653,6 +661,10 @@ type property BLOQUEADOIsNull : Boolean read GetBLOQUEADOIsNull write SetBLOQUEADOIsNull; property OldBLOQUEADO : SmallInt read GetOldBLOQUEADOValue; property OldBLOQUEADOIsNull : Boolean read GetOldBLOQUEADOIsNull; + property PAIS : String read GetPAISValue write SetPAISValue; + property PAISIsNull : Boolean read GetPAISIsNull write SetPAISIsNull; + property OldPAIS : String read GetOldPAISValue; + property OldPAISIsNull : Boolean read GetOldPAISIsNull; public constructor Create(aBusinessProcessor: TDABusinessProcessor); override; @@ -662,7 +674,7 @@ type { IAlbaranesCliente_DetallesDelta } IAlbaranesCliente_DetallesDelta = interface(IAlbaranesCliente_Detalles) - ['{A979524D-4C7B-4853-9AE2-EF0FEB0F920B}'] + ['{F4ADE8A0-DE1F-41FF-96C0-F9E986830529}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_ALBARANValue : Integer; @@ -2466,6 +2478,37 @@ begin BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClienteBLOQUEADO] := Null; end; +function TAlbaranesClienteBusinessProcessorRules.GetPAISValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClientePAIS]; +end; + +function TAlbaranesClienteBusinessProcessorRules.GetPAISIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClientePAIS]); +end; + +function TAlbaranesClienteBusinessProcessorRules.GetOldPAISValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_AlbaranesClientePAIS]; +end; + +function TAlbaranesClienteBusinessProcessorRules.GetOldPAISIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_AlbaranesClientePAIS]); +end; + +procedure TAlbaranesClienteBusinessProcessorRules.SetPAISValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClientePAIS] := aValue; +end; + +procedure TAlbaranesClienteBusinessProcessorRules.SetPAISIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_AlbaranesClientePAIS] := Null; +end; + { TAlbaranesCliente_DetallesBusinessProcessorRules } constructor TAlbaranesCliente_DetallesBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); diff --git a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.dfm b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.dfm index 18ed7c6..43e633a 100644 --- a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.dfm +++ b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.dfm @@ -746,11 +746,11 @@ object RptAlbaranesCliente: TRptAlbaranesCliente 'SAS.PROVINCIA AS PROVINCIA_EMPRESA,'#10' EMPRESAS.TELEFONO_1 AS TEL' + 'EFONO_1_EMPRESA,'#10' EMPRESAS.FAX AS FAX_EMPRESA,'#10' EMPRESAS.MOVIL' + '_1 AS MOVIL_1_EMPRESA,'#10' EMPRESAS.EMAIL_1 AS EMAIL_1_EMPRESA,'#10' ' + - 'EMPRESAS.PAGINA_WEB AS PAGINA_WEB_EMPRESA'#10'FROM'#10' V_ALBARANES_C' + - 'LIENTE'#10' LEFT OUTER JOIN V_CLIENTES ON (V_CLIENTES.ID = V_ALBARA' + - 'NES_CLIENTE.ID_CLIENTE)'#10' LEFT OUTER JOIN EMPRESAS ON (EMPRESAS.' + - 'ID = V_ALBARANES_CLIENTE.ID_EMPRESA)'#10'WHERE V_ALBARANES_CLIENTE.I' + - 'D = :ID'#10 + 'EMPRESAS.PAGINA_WEB AS PAGINA_WEB_EMPRESA,'#10' V_CLIENTES.IDIOMA_I' + + 'SO,'#10' V_ALBARANES_CLIENTE.PAIS'#10'FROM'#10' V_ALBARANES_CLIENTE'#10' LE' + + 'FT OUTER JOIN V_CLIENTES ON (V_CLIENTES.ID = V_ALBARANES_CLIENTE' + + '.ID_CLIENTE)'#10' LEFT OUTER JOIN EMPRESAS ON (EMPRESAS.ID = V_ALBA' + + 'RANES_CLIENTE.ID_EMPRESA)'#10'WHERE V_ALBARANES_CLIENTE.ID = :ID'#10 StatementType = stSQL ColumnMappings = < item @@ -880,6 +880,14 @@ object RptAlbaranesCliente: TRptAlbaranesCliente item DatasetField = 'PAGINA_WEB_EMPRESA' TableField = 'PAGINA_WEB_EMPRESA' + end + item + DatasetField = 'IDIOMA_ISO' + TableField = 'IDIOMA_ISO' + end + item + DatasetField = 'PAIS' + TableField = 'PAIS' end> end> Name = 'Informe_Cabecera' @@ -1034,6 +1042,16 @@ object RptAlbaranesCliente: TRptAlbaranesCliente Name = 'PAGINA_WEB_EMPRESA' DataType = datString Size = 255 + end + item + Name = 'IDIOMA_ISO' + DataType = datString + Size = 2 + end + item + Name = 'PAIS' + DataType = datString + Size = 255 end> end item @@ -2635,15 +2653,169 @@ object RptAlbaranesCliente: TRptAlbaranesCliente object frxReport: TfrxReport Version = '4.7.71' DotMatrixReport = False + EngineOptions.DoublePass = True IniFile = '\Software\Fast Reports' PreviewOptions.Buttons = [pbPrint, pbLoad, pbSave, pbExport, pbZoom, pbFind, pbOutline, pbPageSetup, pbTools, pbEdit, pbNavigator, pbExportQuick] PreviewOptions.Zoom = 1.000000000000000000 PrintOptions.Printer = 'Por defecto' PrintOptions.PrintOnSheet = 0 - ReportOptions.CreateDate = 41478.551891354170000000 - ReportOptions.LastChange = 41478.553933067130000000 + ReportOptions.CreateDate = 39065.872423495400000000 + ReportOptions.LastChange = 41807.752059861110000000 ScriptLanguage = 'PascalScript' ScriptText.Strings = ( + 'var' + ' Pagina: Variant;' + '' + '' + 'procedure DireccionEnvioOnBeforePrint(Sender: TfrxComponent);' + 'var' + ' ACadena : String;' + 'begin' + ' ACadena := '#39#39';' + ' DireccionEnvio.Lines.Clear;' + '' + ' ACadena := '#39#39';' + '' + ' DireccionEnvio.Lines.Add();' + ' if ( <> '#39#39') then' + ' ACadena := + '#39' '#39';' + ' if ( <> '#39#39') then' + ' ACadena := ACadena + ;' + '' + ' if (ACadena <> '#39#39') then' + ' DireccionEnvio.Lines.Add(ACadena);' + '' + + ' ACadena := '#39#39'; ' + + ' ' + ' if ( <> '#39#39') then' + ' ACadena := ;' + '' + ' if ( <> '#39#39') then' + ' ACadena := ACadena + '#39' - '#39' + ;' + ' ' + ' DireccionEnvio.Lines.Add(ACadena); ' + 'end;' + '' + 'procedure Memo2OnBeforePrint(Sender: TfrxComponent);' + 'begin' + ' Memo2.Lines.Clear;' + ' if (StrToFloat() < 0) then' + ' Memo2.Lines.Add('#39'RETURN ORDER'#39')' + ' else' + ' Memo2.Lines.Add('#39'DELIVERY NOTE'#39')' + 'end;' + '' + 'procedure Memo5OnBeforePrint(Sender: TfrxComponent);' + 'begin' + ' if (StrToFloat() < 0) then' + ' begin' + ' Memo5.Lines.Clear;' + ' Memo5.Lines.Add('#39'Order number:'#39');' + ' end;' + 'end;' + '' + 'procedure Memo9OnBeforePrint(Sender: TfrxComponent);' + 'begin' + ' if (StrToFloat() < 0) then' + ' begin' + ' Memo9.Lines.Clear;' + ' Memo9.Lines.Add('#39'Date order:'#39');' + ' end;' + 'end;' + '' + 'procedure PageHeader1OnBeforePrint(Sender: TfrxComponent);' + 'begin' + ' if not Engine.FinalPass then' + ' Set('#39'TotalPaginas'#39', ( + 1));' + '' + ' if Engine.FinalPass then' + ' Set('#39'Pagina'#39', ( + 1));' + 'end;' + '' + 'procedure frxReportOnStartReport(Sender: TfrxComponent);' + 'begin' + ' Set('#39'Pagina'#39', 0);' + ' Set('#39'TotalPaginas'#39', 0);' + 'end;' + '' + 'procedure Memo26OnBeforePrint(Sender: TfrxComponent);' + 'begin' + + ' if and ( <> ' + + #39#39') then' + + ' Memo26.Visible := True ' + + ' ' + ' else' + ' Memo26.Visible := False ' + 'end;' + '' + 'procedure Memo27OnBeforePrint(Sender: TfrxComponent);' + 'begin' + + ' if and ( <> '#39#39') ' + + 'then' + + ' Memo27.Visible := True ' + + ' ' + ' else' + ' Memo27.Visible := False ' + 'end;' + '' + 'procedure eImporteUnidadOnBeforePrint(Sender: TfrxComponent);' + 'begin' + ' if then' + ' begin ' + ' eImporteUnidad.Visible := True; ' + ' lImporteUnidad.Visible := True;' + ' eDescuento.Visible := True;' + + ' lDescuento.Visible := True; ' + + ' ' + ' eImporteTotal.Visible := True; ' + ' lImporteTotal.Visible := True; ' + ' ImporteUnidad.Visible := True;' + + ' Descuento.Visible := True; ' + + ' ' + ' ImporteTotal.Visible := True; ' + ' end' + ' else' + ' begin ' + ' eImporteUnidad.Visible := False; ' + ' lImporteUnidad.Visible := False; ' + ' eImporteTotal.Visible := False; ' + ' lImporteTotal.Visible := False;' + ' eDescuento.Visible := False;' + + ' lDescuento.Visible := False; ' + + ' ' + ' ImporteUnidad.Visible := False; ' + ' ImporteTotal.Visible := False;' + + ' Descuento.Visible := False; ' + + ' ' + + ' eConcepto.Width := eConcepto.Width + ImporteTotal.Width + e' + + 'Descuento.Width + ImporteUnidad.Width + 10;' + ' Concepto.Width := eConcepto.Width - 10; ' + ' end ' + 'end;' + '' + 'procedure Overlay1OnBeforePrint(Sender: TfrxComponent);' + 'begin' + ' if then' + ' begin' + + ' Overlay1.Visible := True; ' + + ' ' + ' end' + ' else' + ' begin ' + ' Overlay1.Visible := False; ' + ' end ' + 'end;' '' 'begin' '' @@ -2651,6 +2823,7 @@ object RptAlbaranesCliente: TRptAlbaranesCliente ShowProgress = False StoreInDFM = False OnGetValue = frxReportGetValue + OnStartReport = 'frxReportOnStartReport' Left = 145 Top = 16 end @@ -3032,6 +3205,16 @@ object RptAlbaranesCliente: TRptAlbaranesCliente Name = 'PAGINA_WEB_EMPRESA' DataType = datString Size = 255 + end + item + Name = 'IDIOMA_ISO' + DataType = datString + Size = 2 + end + item + Name = 'PAIS' + DataType = datString + Size = 255 end> Params = < item diff --git a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas index e77a903..ece8968 100644 --- a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas +++ b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas @@ -246,7 +246,7 @@ begin tbl_Cabecera.Active := True; tbl_Detalles.Active := True; - AInforme := DarRutaFichero(DarRutaInformes, rptInforme, tbl_Cabecera.FieldByName('ID_EMPRESA').AsString); + AInforme := DarRutaFichero(DarRutaInformes, rptInforme, tbl_Cabecera.FieldByName('ID_EMPRESA').AsString, tbl_Cabecera.FieldByName('IDIOMA_ISO').AsString); if VarIsNull(AInforme) then raise Exception.Create (('Error Servidor: _GenerarFactura, no encuentra informe ' + rptInforme)); diff --git a/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm b/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm index e216d6c..9c6206b 100644 --- a/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm +++ b/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm @@ -243,6 +243,10 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente item DatasetField = 'BLOQUEADO' TableField = 'BLOQUEADO' + end + item + DatasetField = 'PAIS' + TableField = 'PAIS' end> end> Name = 'AlbaranesCliente' @@ -510,6 +514,11 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente item Name = 'BLOQUEADO' DataType = datSmallInt + end + item + Name = 'PAIS' + DataType = datString + Size = 255 end> end item @@ -870,6 +879,12 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente Name = 'ID_ALBARAN_DEV' DataType = datInteger Value = '' + end + item + Name = 'PAIS' + DataType = datString + Size = 255 + Value = '' end> Statements = < item @@ -885,16 +900,16 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente 'ASE_IMPONIBLE, IVA, IMPORTE_IVA, IMPORTE_TOTAL, OBSERVACIONES, '#10 + ' INCIDENCIAS, INCIDENCIAS_ACTIVAS, FECHA_ALTA, FECHA_MODIFIC' + 'ACION, '#10' USUARIO, ID_FORMA_PAGO, FECHA_PREVISTA_ENVIO, FECHA' + - '_ENVIO, '#10' FECHA_RECEPCION, ID_ALBARAN_DEV)'#10' VALUES'#10' (:ID' + - ', :ID_EMPRESA, :ID_CLIENTE, :FECHA_ALBARAN, :TIPO, :REFERENCIA,'#10 + - ' :REFERENCIA_CLIENTE, :ID_ALMACEN, :ID_PEDIDO, :ID_FACTURA, ' + - ':ID_DIRECCION,'#10' :CALLE, :CODIGO_POSTAL, :POBLACION, :PROVINC' + - 'IA, :PERSONA_CONTACTO,'#10' :TELEFONO, :IMPORTE_NETO, :IMPORTE_P' + - 'ORTE, :DESCUENTO, :IMPORTE_DESCUENTO,'#10' :BASE_IMPONIBLE, :IVA' + - ', :IMPORTE_IVA, :IMPORTE_TOTAL, :OBSERVACIONES,'#10' :INCIDENCIA' + - 'S, :INCIDENCIAS_ACTIVAS, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP,'#10' ' + - ' :USUARIO, :ID_FORMA_PAGO, :FECHA_PREVISTA_ENVIO, :FECHA_ENVI' + - 'O,'#10' :FECHA_RECEPCION, :ID_ALBARAN_DEV)'#10#10 + '_ENVIO, '#10' FECHA_RECEPCION, ID_ALBARAN_DEV, PAIS)'#10' VALUES'#10' ' + + ' (:ID, :ID_EMPRESA, :ID_CLIENTE, :FECHA_ALBARAN, :TIPO, :REFERE' + + 'NCIA,'#10' :REFERENCIA_CLIENTE, :ID_ALMACEN, :ID_PEDIDO, :ID_FAC' + + 'TURA, :ID_DIRECCION,'#10' :CALLE, :CODIGO_POSTAL, :POBLACION, :P' + + 'ROVINCIA, :PERSONA_CONTACTO,'#10' :TELEFONO, :IMPORTE_NETO, :IMP' + + 'ORTE_PORTE, :DESCUENTO, :IMPORTE_DESCUENTO,'#10' :BASE_IMPONIBLE' + + ', :IVA, :IMPORTE_IVA, :IMPORTE_TOTAL, :OBSERVACIONES,'#10' :INCI' + + 'DENCIAS, :INCIDENCIAS_ACTIVAS, CURRENT_TIMESTAMP, CURRENT_TIMEST' + + 'AMP,'#10' :USUARIO, :ID_FORMA_PAGO, :FECHA_PREVISTA_ENVIO, :FECH' + + 'A_ENVIO,'#10' :FECHA_RECEPCION, :ID_ALBARAN_DEV, :PAIS)'#10#10 StatementType = stSQL ColumnMappings = <> end> @@ -1094,6 +1109,12 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente DataType = datInteger Value = '' end + item + Name = 'PAIS' + DataType = datString + Size = 255 + Value = '' + end item Name = 'OLD_ID' Value = '' @@ -1122,8 +1143,8 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente 'STAMP,'#10' USUARIO = :USUARIO, '#10' ID_FORMA_PAGO = :ID_FORMA_PA' + 'GO, '#10' FECHA_PREVISTA_ENVIO = :FECHA_PREVISTA_ENVIO, '#10' FECH' + 'A_ENVIO = :FECHA_ENVIO, '#10' FECHA_RECEPCION = :FECHA_RECEPCION,' + - #10' ID_ALBARAN_DEV = :ID_ALBARAN_DEV'#10' WHERE'#10' (ID = :OLD_ID)' + - #10 + #10' ID_ALBARAN_DEV = :ID_ALBARAN_DEV,'#10' PAIS = :PAIS'#10' WHERE'#10 + + ' (ID = :OLD_ID)'#10 StatementType = stSQL ColumnMappings = <> end> diff --git a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranCliente.dfm b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranCliente.dfm index facc0d6..090582c 100644 --- a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranCliente.dfm +++ b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranCliente.dfm @@ -198,9 +198,9 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente ExplicitHeight = 378 inherited ToolBar1: TToolBar Width = 751 - Height = 51 + Height = 78 ExplicitWidth = 751 - ExplicitHeight = 51 + ExplicitHeight = 78 inherited ToolButton3: TToolButton Wrap = False end @@ -223,83 +223,84 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente ExplicitLeft = 399 ExplicitTop = 0 end - inherited FontSize: TEdit + inherited ToolButton13: TToolButton [6] Left = 544 Top = 0 - Width = 186 + Wrap = True ExplicitLeft = 544 ExplicitTop = 0 - ExplicitWidth = 186 end - inherited UpDown1: TUpDown - Left = 730 + inherited ToolButton6: TToolButton [7] + Left = 552 Top = 0 - ExplicitLeft = 730 + ExplicitLeft = 552 ExplicitTop = 0 end - inherited ToolButton13: TToolButton + inherited ToolButton7: TToolButton [8] Left = 0 - Top = 0 + Top = 22 + ExplicitLeft = 0 + ExplicitTop = 22 + end + inherited ToolButton8: TToolButton [9] + Left = 0 + Enabled = True Wrap = True ExplicitLeft = 0 - ExplicitTop = 0 + end + inherited ToolButton12: TToolButton [10] + Left = 0 + Top = 66 + Wrap = True + ExplicitLeft = 0 + ExplicitTop = 66 ExplicitHeight = 27 end - inherited ToolButton6: TToolButton + inherited UpDown1: TUpDown [11] Left = 0 - Top = 27 + Top = 93 ExplicitLeft = 0 - ExplicitTop = 27 + ExplicitTop = 93 end - inherited ToolButton7: TToolButton - Left = 66 - Top = 27 - ExplicitLeft = 66 - ExplicitTop = 27 - end - inherited ToolButton8: TToolButton - Left = 133 - Top = 27 - ExplicitLeft = 133 - ExplicitTop = 27 - end - inherited ToolButton12: TToolButton - Left = 216 - Top = 27 - ExplicitLeft = 216 - ExplicitTop = 27 + inherited FontSize: TEdit [12] + Left = 17 + Top = 93 + Width = 186 + ExplicitLeft = 17 + ExplicitTop = 93 + ExplicitWidth = 186 end inherited ToolButton9: TToolButton - Left = 224 - Top = 27 - ExplicitLeft = 224 - ExplicitTop = 27 + Left = 203 + Top = 93 + ExplicitLeft = 203 + ExplicitTop = 93 end inherited ToolButton10: TToolButton - Left = 369 - Top = 27 - ExplicitLeft = 369 - ExplicitTop = 27 + Left = 348 + Top = 93 + ExplicitLeft = 348 + ExplicitTop = 93 end inherited ToolButton11: TToolButton - Left = 494 - Top = 27 - ExplicitLeft = 494 - ExplicitTop = 27 + Left = 473 + Top = 93 + ExplicitLeft = 473 + ExplicitTop = 93 end end inherited cxGrid: TcxGrid - Top = 77 + Top = 104 Width = 751 - Height = 301 - ExplicitTop = 77 + Height = 274 + ExplicitTop = 104 ExplicitWidth = 751 - ExplicitHeight = 301 + ExplicitHeight = 274 end inherited TBXDock1: TTBXDock - Top = 51 + Top = 78 Width = 751 - ExplicitTop = 51 + ExplicitTop = 78 ExplicitWidth = 751 inherited TBXToolbar1: TTBXToolbar ExplicitWidth = 566 @@ -392,52 +393,52 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente ExplicitHeight = 78 inherited Bevel3: TBevel Left = 428 - Top = -129 + Top = 11 Width = 7 Height = 54 ExplicitLeft = 428 - ExplicitTop = -129 + ExplicitTop = 11 ExplicitWidth = 7 ExplicitHeight = 54 end inherited Bevel4: TBevel Left = 544 - Top = -87 + Top = 53 Width = 192 ExplicitLeft = 544 - ExplicitTop = -87 + ExplicitTop = 53 ExplicitWidth = 192 end inherited Bevel1: TBevel Left = 544 - Top = 29 + Top = 169 Width = 73 ExplicitLeft = 544 - ExplicitTop = 29 + ExplicitTop = 169 ExplicitWidth = 73 end inherited Bevel2: TBevel Left = 120 - Top = 31 + Top = 171 Width = 368 ExplicitLeft = 120 - ExplicitTop = 31 + ExplicitTop = 171 ExplicitWidth = 368 end inherited ImporteDto: TcxDBCurrencyEdit Left = 191 - Top = -102 + Top = 38 Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 191 - ExplicitTop = -102 + ExplicitTop = 38 end inherited ImporteIVA: TcxDBCurrencyEdit Left = 615 - Top = -52 + Top = 88 DataBinding.DataField = '' Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True @@ -445,37 +446,37 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 615 - ExplicitTop = -52 + ExplicitTop = 88 ExplicitWidth = 182 Width = 182 end inherited ImporteTotal: TcxDBCurrencyEdit Left = 545 - Top = 2 + Top = 142 Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 545 - ExplicitTop = 2 + ExplicitTop = 142 ExplicitWidth = 252 Width = 252 end inherited edtDescuento: TcxDBSpinEdit Left = 120 - Top = -102 + Top = 38 Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 120 - ExplicitTop = -102 + ExplicitTop = 38 end inherited edtIVA: TcxDBSpinEdit Left = 544 - Top = -52 + Top = 88 DataBinding.DataField = '' Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True @@ -483,24 +484,24 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 544 - ExplicitTop = -52 + ExplicitTop = 88 end inherited ImporteBase: TcxDBCurrencyEdit Left = 544 - Top = -129 + Top = 11 Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 544 - ExplicitTop = -129 + ExplicitTop = 11 ExplicitWidth = 253 Width = 253 end inherited edtRE: TcxDBSpinEdit Left = 544 - Top = -25 + Top = 115 DataBinding.DataField = '' Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True @@ -508,11 +509,11 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 544 - ExplicitTop = -25 + ExplicitTop = 115 end inherited ImporteRE: TcxDBCurrencyEdit Left = 615 - Top = -25 + Top = 115 DataBinding.DataField = '' Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True @@ -520,13 +521,13 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 615 - ExplicitTop = -25 + ExplicitTop = 115 ExplicitWidth = 182 Width = 182 end inherited eImporteNeto: TcxDBCurrencyEdit Left = 120 - Top = -129 + Top = 11 Enabled = False Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True @@ -534,11 +535,11 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 120 - ExplicitTop = -129 + ExplicitTop = 11 end inherited ePorte: TcxDBCurrencyEdit Left = 120 - Top = -75 + Top = 65 Properties.OnValidate = frViewTotales1ePortePropertiesValidate Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True @@ -546,28 +547,28 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 120 - ExplicitTop = -75 + ExplicitTop = 65 end inherited eIVA: TcxDBLookupComboBox Left = 120 - Top = -48 + Top = 92 DataBinding.DataField = '' Style.LookAndFeel.SkinName = '' StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 120 - ExplicitTop = -48 + ExplicitTop = 92 end inherited bTiposIVA: TButton Left = 280 - Top = -48 + Top = 92 ExplicitLeft = 280 - ExplicitTop = -48 + ExplicitTop = 92 end inherited cbRecargoEquivalencia: TcxDBCheckBox Left = 120 - Top = -21 + Top = 119 DataBinding.DataField = '' DataBinding.DataSource = nil Style.LookAndFeel.SkinName = '' @@ -575,43 +576,43 @@ inherited fEditorAlbaranCliente: TfEditorAlbaranCliente StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 120 - ExplicitTop = -21 + ExplicitTop = 119 ExplicitWidth = 221 Width = 221 end inherited edtRetencion: TcxDBSpinEdit Left = 544 - Top = 49 + Top = 189 Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 544 - ExplicitTop = 49 + ExplicitTop = 189 end inherited edtImporteRetencion: TcxDBCurrencyEdit Left = 615 - Top = 49 + Top = 189 Style.LookAndFeel.SkinName = '' Style.IsFontAssigned = True StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 615 - ExplicitTop = 49 + ExplicitTop = 189 ExplicitWidth = 180 Width = 180 end inherited edtFechaRetencion: TcxDBDateEdit Left = 120 - Top = 51 + Top = 191 Style.LookAndFeel.SkinName = '' StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 120 - ExplicitTop = 51 + ExplicitTop = 191 ExplicitWidth = 280 Width = 280 end diff --git a/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranCliente.dfm b/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranCliente.dfm index fe89dc4..580cb68 100644 --- a/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranCliente.dfm +++ b/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranCliente.dfm @@ -20,7 +20,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente 591) object Label1: TLabel Left = 22 - Top = 450 + Top = 477 Width = 299 Height = 26 Caption = @@ -76,7 +76,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.NativeStyle = True StyleHot.LookAndFeel.SkinName = '' - TabOrder = 21 + TabOrder = 22 Height = 69 Width = 403 end @@ -158,7 +158,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente end object ePersonaContacto: TcxDBTextEdit Left = 116 - Top = 305 + Top = 332 DataBinding.DataField = 'PERSONA_CONTACTO' DataBinding.DataSource = DADataSource Style.BorderColor = clWindowFrame @@ -177,12 +177,12 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True StyleHot.LookAndFeel.SkinName = '' - TabOrder = 12 + TabOrder = 13 Width = 336 end object eTlfTrabajo: TcxDBTextEdit Left = 116 - Top = 332 + Top = 359 DataBinding.DataField = 'TELEFONO' DataBinding.DataSource = DADataSource Style.BorderColor = clWindowFrame @@ -200,18 +200,18 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True StyleHot.LookAndFeel.SkinName = '' - TabOrder = 13 + TabOrder = 14 Width = 336 end object bElegirDireccion: TBitBtn Left = 278 - Top = 359 + Top = 386 Width = 172 Height = 23 Action = actElegirDireccion Caption = 'Elegir una direcci'#243'n de env'#237'o...' Enabled = False - TabOrder = 14 + TabOrder = 15 end object Button1: TButton Left = 318 @@ -317,21 +317,21 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True StyleHot.LookAndFeel.SkinName = '' - TabOrder = 20 + TabOrder = 21 Width = 265 end object cbConAlmacen: TCheckBox Left = 32 - Top = 418 + Top = 445 Width = 179 Height = 21 Caption = 'Asociar este albar'#225'n al almac'#233'n:' - TabOrder = 15 + TabOrder = 16 OnClick = cbConAlmacenClick end object cbAlmacen: TcxDBLookupComboBox Left = 217 - Top = 418 + Top = 445 DataBinding.DataField = 'ID_ALMACEN' DataBinding.DataSource = DADataSource Properties.KeyFieldNames = 'ID' @@ -360,7 +360,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True StyleHot.LookAndFeel.SkinName = '' - TabOrder = 16 + TabOrder = 17 Width = 235 end object eRefFacturaCli: TcxDBTextEdit @@ -421,7 +421,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True StyleHot.LookAndFeel.SkinName = '' - TabOrder = 18 + TabOrder = 19 Width = 265 end object eRefCliente: TcxDBTextEdit @@ -479,7 +479,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True StyleHot.LookAndFeel.SkinName = '' - TabOrder = 19 + TabOrder = 20 Width = 265 end object cbProvincia: TcxDBComboBox @@ -551,7 +551,7 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente Font.Name = 'Tahoma' Font.Style = [] ParentFont = False - TabOrder = 17 + TabOrder = 18 ReadOnly = False ExplicitLeft = 480 ExplicitTop = 28 @@ -647,6 +647,35 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente Top = 32 end end + object cbPais: TcxDBComboBox + Left = 116 + Top = 305 + DataBinding.DataField = 'PAIS' + DataBinding.DataSource = DADataSource + Properties.DropDownListStyle = lsEditFixedList + Properties.ImmediatePost = True + Properties.ImmediateUpdateText = True + Properties.PostPopupValueOnTab = True + Properties.OnInitPopup = cbPaisPropertiesInitPopup + Style.BorderColor = clWindowFrame + Style.BorderStyle = ebs3D + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + Style.LookAndFeel.SkinName = '' + Style.ButtonStyle = bts3D + Style.PopupBorderStyle = epbsFrame3D + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.SkinName = '' + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.SkinName = '' + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.SkinName = '' + TabOrder = 12 + Width = 263 + end object dxLayoutControl1Group_Root: TdxLayoutGroup ShowCaption = False Hidden = True @@ -773,6 +802,11 @@ inherited frViewAlbaranCliente: TfrViewAlbaranCliente Control = cbPoblacion ControlOptions.ShowBorder = False end + object dxLayoutControl1Item17: TdxLayoutItem + Caption = 'Pa'#237's:' + Control = cbPais + ControlOptions.ShowBorder = False + end object dxLayoutControl1Item12: TdxLayoutItem Caption = 'Pers. de contacto:' Control = ePersonaContacto diff --git a/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranCliente.pas b/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranCliente.pas index c21ba6a..519cf6d 100644 --- a/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranCliente.pas +++ b/Source/Modulos/Albaranes de cliente/Views/uViewAlbaranCliente.pas @@ -103,6 +103,8 @@ type dxLayoutControl1Group9: TdxLayoutGroup; frViewDatosYSeleccionClienteAlbaran1: TfrViewDatosYSeleccionClienteAlbaran; dxLayoutControl1Item1: TdxLayoutItem; + dxLayoutControl1Item17: TdxLayoutItem; + cbPais: TcxDBComboBox; procedure CustomViewCreate(Sender: TObject); procedure CustomViewDestroy(Sender: TObject); procedure actElegirDireccionExecute(Sender: TObject); @@ -122,6 +124,7 @@ type procedure frViewClienteAlbaranactAnadirContactoUpdate(Sender: TObject); procedure cbProvinciaPropertiesInitPopup(Sender: TObject); procedure cbPoblacionPropertiesInitPopup(Sender: TObject); + procedure cbPaisPropertiesInitPopup(Sender: TObject); protected FController : IAlbaranesClienteController; @@ -133,12 +136,14 @@ type FViewClienteAlbaran : IViewDatosYSeleccionClienteAlbaran; FFormasPago : IBizFormaPago; FFormasPagoController : IFormasPagoController; + FPaises : TStringList; FProvincias : TStringList; FIDProvincia : Integer; //Almacenará la provincia que hay seleccionada para no cargar las poblaciones si no es necesario FPoblaciones : TStringList; procedure CargarProvincias; procedure CargarPoblaciones; + procedure CargarPaises; function GetAlbaran: IBizAlbaranCliente; procedure SetAlbaran(const Value: IBizAlbaranCliente); virtual; @@ -225,6 +230,30 @@ begin FFormasPagoController.VerTodos(FFormasPago); end; +procedure TfrViewAlbaranCliente.CargarPaises; +var + i : integer; +begin + with TProvinciasPoblacionesController.Create do + try + FPaises := DarListaPaises; + + with cbPais.Properties.Items do + begin + BeginUpdate; + try + Clear; + for i := 0 to FPaises.Count - 1 do + Add(FPaises.Names[i]); + finally + EndUpdate; + end; + end; + finally + Free; + end; +end; + procedure TfrViewAlbaranCliente.CargarPoblaciones; var i : integer; @@ -297,6 +326,17 @@ begin end; end; +procedure TfrViewAlbaranCliente.cbPaisPropertiesInitPopup(Sender: TObject); +begin + ShowHourglassCursor; + try + if not Assigned(FPaises) then + CargarPaises; + finally + HideHourglassCursor; + end; +end; + procedure TfrViewAlbaranCliente.cbPoblacionPropertiesInitPopup(Sender: TObject); begin inherited; diff --git a/Source/Modulos/Albaranes de cliente/Views/uViewDireccionEntregaAlbaranCliente.dfm b/Source/Modulos/Albaranes de cliente/Views/uViewDireccionEntregaAlbaranCliente.dfm index 5e29e3f..086a134 100644 --- a/Source/Modulos/Albaranes de cliente/Views/uViewDireccionEntregaAlbaranCliente.dfm +++ b/Source/Modulos/Albaranes de cliente/Views/uViewDireccionEntregaAlbaranCliente.dfm @@ -1,18 +1,19 @@ inherited frViewDireccionEntregaAlbaranCliente: TfrViewDireccionEntregaAlbaranCliente Width = 337 - Height = 126 + Height = 163 ExplicitWidth = 337 - ExplicitHeight = 126 + ExplicitHeight = 163 object dxLayoutControl1: TdxLayoutControl Left = 0 Top = 0 Width = 337 - Height = 126 + Height = 163 Align = alClient ParentBackground = True TabOrder = 0 TabStop = False AutoContentSizes = [acsWidth, acsHeight] + ExplicitHeight = 126 object eCalle: TcxDBTextEdit Left = 64 Top = 10 @@ -53,7 +54,7 @@ inherited frViewDireccionEntregaAlbaranCliente: TfrViewDireccionEntregaAlbaranCl end object eTlfTrabajo: TcxDBTextEdit Left = 205 - Top = 91 + Top = 118 DataBinding.DataField = 'TELEFONO' DataBinding.DataSource = dsAlbaran Style.BorderColor = clWindowFrame @@ -67,12 +68,12 @@ inherited frViewDireccionEntregaAlbaranCliente: TfrViewDireccionEntregaAlbaranCl StyleFocused.LookAndFeel.NativeStyle = True StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True - TabOrder = 5 + TabOrder = 6 Width = 122 end object ePersonaContacto: TcxDBTextEdit Left = 64 - Top = 91 + Top = 118 DataBinding.DataField = 'PERSONA_CONTACTO' DataBinding.DataSource = dsAlbaran Style.BorderColor = clWindowFrame @@ -87,7 +88,7 @@ inherited frViewDireccionEntregaAlbaranCliente: TfrViewDireccionEntregaAlbaranCl StyleFocused.LookAndFeel.NativeStyle = True StyleHot.LookAndFeel.Kind = lfStandard StyleHot.LookAndFeel.NativeStyle = True - TabOrder = 4 + TabOrder = 5 Width = 84 end object cbProvincia: TcxDBComboBox @@ -140,6 +141,34 @@ inherited frViewDireccionEntregaAlbaranCliente: TfrViewDireccionEntregaAlbaranCl TabOrder = 3 Width = 263 end + object cbPais: TcxDBComboBox + Left = 64 + Top = 91 + DataBinding.DataField = 'PAIS' + Properties.DropDownListStyle = lsEditFixedList + Properties.ImmediatePost = True + Properties.ImmediateUpdateText = True + Properties.PostPopupValueOnTab = True + Properties.OnInitPopup = cbPaisPropertiesInitPopup + Style.BorderColor = clWindowFrame + Style.BorderStyle = ebs3D + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + Style.LookAndFeel.SkinName = '' + Style.ButtonStyle = bts3D + Style.PopupBorderStyle = epbsFrame3D + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.SkinName = '' + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.SkinName = '' + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.SkinName = '' + TabOrder = 4 + Width = 256 + end object dxLayoutGroup1: TdxLayoutGroup ShowCaption = False Hidden = True @@ -182,6 +211,11 @@ inherited frViewDireccionEntregaAlbaranCliente: TfrViewDireccionEntregaAlbaranCl Control = cbPoblacion ControlOptions.ShowBorder = False end + object dxLayoutControl1Item7: TdxLayoutItem + Caption = 'Pa'#237's:' + Control = cbPais + ControlOptions.ShowBorder = False + end end object dxLayoutControl1Group4: TdxLayoutGroup ShowCaption = False diff --git a/Source/Modulos/Albaranes de cliente/Views/uViewDireccionEntregaAlbaranCliente.pas b/Source/Modulos/Albaranes de cliente/Views/uViewDireccionEntregaAlbaranCliente.pas index 8246f11..8667d71 100644 --- a/Source/Modulos/Albaranes de cliente/Views/uViewDireccionEntregaAlbaranCliente.pas +++ b/Source/Modulos/Albaranes de cliente/Views/uViewDireccionEntregaAlbaranCliente.pas @@ -38,17 +38,22 @@ type dxLayoutControl1Item3: TdxLayoutItem; cbPoblacion: TcxDBComboBox; dxLayoutControl1Group2: TdxLayoutGroup; + dxLayoutControl1Item7: TdxLayoutItem; + cbPais: TcxDBComboBox; procedure cbListaPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure cbProvinciaPropertiesInitPopup(Sender: TObject); procedure cbPoblacionPropertiesInitPopup(Sender: TObject); + procedure cbPaisPropertiesInitPopup(Sender: TObject); protected // FAlmacenesController : IAlmacenesController; // FAlmacenes: IBizAlmacen; FAlbaran : IBizAlbaranCliente; FController : IAlbaranesClienteController; + FPaises : TStringList; FProvincias : TStringList; FIDProvincia : Integer; //Almacenará la provincia que hay seleccionada para no cargar las poblaciones si no es necesario FPoblaciones : TStringList; + procedure CargarPaises; procedure CargarProvincias; procedure CargarPoblaciones; function GetAlbaranCliente: IBizAlbaranCliente; @@ -69,6 +74,30 @@ uses uProvinciasPoblacionesController, uStringsUtils; +procedure TfrViewDireccionEntregaAlbaranCliente.CargarPaises; +var + i : integer; +begin + with TProvinciasPoblacionesController.Create do + try + FPaises := DarListaPaises; + + with cbPais.Properties.Items do + begin + BeginUpdate; + try + Clear; + for i := 0 to FPaises.Count - 1 do + Add(FPaises.Names[i]); + finally + EndUpdate; + end; + end; + finally + Free; + end; +end; + procedure TfrViewDireccionEntregaAlbaranCliente.CargarPoblaciones; var i : integer; @@ -140,6 +169,18 @@ begin end;} end; +procedure TfrViewDireccionEntregaAlbaranCliente.cbPaisPropertiesInitPopup( + Sender: TObject); +begin + ShowHourglassCursor; + try + if not Assigned(FPaises) then + CargarPaises; + finally + HideHourglassCursor; + end; +end; + procedure TfrViewDireccionEntregaAlbaranCliente.cbPoblacionPropertiesInitPopup( Sender: TObject); begin diff --git a/Source/Modulos/Contactos/Controller/uContactosController.pas b/Source/Modulos/Contactos/Controller/uContactosController.pas index 27b0d30..701dc39 100644 --- a/Source/Modulos/Contactos/Controller/uContactosController.pas +++ b/Source/Modulos/Contactos/Controller/uContactosController.pas @@ -6,13 +6,14 @@ interface uses Windows, Forms, Classes, Controls, Contnrs, SysUtils, uDADataTable, uBizContactos, uBizContactosDatosBancarios, uIDataModuleContactos, - uControllerBase, uBizContactosPersonal; + uControllerBase, uBizContactosPersonal, uBizIdiomas; type IContactosController = interface(IControllerBase) ['{43F9A4ED-6563-4F95-9A56-330CF9C66731}'] function Buscar(const ID: Integer): IBizContacto; function BuscarTodos: IBizContacto; + function BuscarIdiomas: IBizIdiomas; procedure Ver(AContacto : IBizContacto); procedure VerTodos(AContactos: IBizContacto); function Nuevo : IBizContacto; @@ -56,6 +57,7 @@ type // Se implementa en los controladores hijos function Buscar(const ID: Integer): IBizContacto; virtual; abstract; function BuscarTodos: IBizContacto; virtual; abstract; + function BuscarIdiomas: IBizIdiomas; function Nuevo : IBizContacto; virtual; abstract; procedure Ver(AContacto : IBizContacto); virtual; abstract; procedure VerTodos(AContactos: IBizContacto); virtual; abstract; @@ -105,6 +107,11 @@ begin end; end; +function TContactosController.BuscarIdiomas: IBizIdiomas; +begin + Result := (FDataModule as IDataModuleContactos).GetIdiomas; +end; + constructor TContactosController.Create; begin inherited; diff --git a/Source/Modulos/Contactos/Controller/uDireccionesContactoController.pas b/Source/Modulos/Contactos/Controller/uDireccionesContactoController.pas index 50652c6..14f4d84 100644 --- a/Source/Modulos/Contactos/Controller/uDireccionesContactoController.pas +++ b/Source/Modulos/Contactos/Controller/uDireccionesContactoController.pas @@ -79,6 +79,7 @@ begin POBLACION := AContacto.POBLACION; PROVINCIA := AContacto.PROVINCIA; CODIGO_POSTAL := AContacto.CODIGO_POSTAL; + PAIS := AContacto.PAIS; TELEFONO := AContacto.TELEFONO_1; FAX := AContacto.FAX; MOVIL := AContacto.MOVIL_1; diff --git a/Source/Modulos/Contactos/Data/uDataModuleAgentes.dfm b/Source/Modulos/Contactos/Data/uDataModuleAgentes.dfm index 8479a28..8052496 100644 --- a/Source/Modulos/Contactos/Data/uDataModuleAgentes.dfm +++ b/Source/Modulos/Contactos/Data/uDataModuleAgentes.dfm @@ -86,6 +86,21 @@ inherited DataModuleAgentes: TDataModuleAgentes DisplayLabel = 'C'#243'digo postal' DictionaryEntry = 'Contactos_CODIGO_POSTAL' end + item + Name = 'PAIS' + DataType = datString + Size = 255 + end + item + Name = 'IDIOMA_ISO' + DataType = datString + Size = 2 + end + item + Name = 'IDIOMA' + DataType = datString + Size = 255 + end item Name = 'TELEFONO_1' DataType = datString diff --git a/Source/Modulos/Contactos/Data/uDataModuleClientes.dfm b/Source/Modulos/Contactos/Data/uDataModuleClientes.dfm index 23ab380..8a57f06 100644 --- a/Source/Modulos/Contactos/Data/uDataModuleClientes.dfm +++ b/Source/Modulos/Contactos/Data/uDataModuleClientes.dfm @@ -32,7 +32,7 @@ inherited DataModuleClientes: TDataModuleClientes Left = 184 Top = 288 end - object tbl_Clientes: TDAMemDataTable + object tbl_Clientes: TDAMemDataTable [13] RemoteUpdatesOptions = [] Fields = < item @@ -98,6 +98,21 @@ inherited DataModuleClientes: TDataModuleClientes DisplayLabel = 'C'#243'digo postal' DictionaryEntry = 'Contactos_CODIGO_POSTAL' end + item + Name = 'PAIS' + DataType = datString + Size = 255 + end + item + Name = 'IDIOMA_ISO' + DataType = datString + Size = 2 + end + item + Name = 'IDIOMA' + DataType = datString + Size = 255 + end item Name = 'TELEFONO_1' DataType = datString @@ -164,10 +179,14 @@ inherited DataModuleClientes: TDataModuleClientes item Name = 'FECHA_ALTA' DataType = datDateTime + DisplayLabel = 'Clientes_FECHA_ALTA' + DictionaryEntry = 'Clientes_FECHA_ALTA' end item Name = 'FECHA_MODIFICACION' DataType = datDateTime + DisplayLabel = 'Clientes_FECHA_MODIFICACION' + DictionaryEntry = 'Clientes_FECHA_MODIFICACION' end item Name = 'USUARIO' @@ -191,6 +210,7 @@ inherited DataModuleClientes: TDataModuleClientes item Name = 'ID_AGENTE' DataType = datInteger + DictionaryEntry = 'Clientes_ID_AGENTE' end item Name = 'GRUPO_CLIENTE' @@ -209,14 +229,20 @@ inherited DataModuleClientes: TDataModuleClientes item Name = 'VENCIMIENTO_FACTURAS_1' DataType = datSmallInt + DisplayLabel = 'Clientes_VENCIMIENTO_FACTURAS_1' + DictionaryEntry = 'Clientes_VENCIMIENTO_FACTURAS_1' end item Name = 'VENCIMIENTO_FACTURAS_2' DataType = datSmallInt + DisplayLabel = 'Clientes_VENCIMIENTO_FACTURAS_2' + DictionaryEntry = 'Clientes_VENCIMIENTO_FACTURAS_2' end item Name = 'VENCIMIENTO_FACTURAS_3' DataType = datSmallInt + DisplayLabel = 'Clientes_VENCIMIENTO_FACTURAS_3' + DictionaryEntry = 'Clientes_VENCIMIENTO_FACTURAS_3' end item Name = 'BLOQUEADO' @@ -228,15 +254,21 @@ inherited DataModuleClientes: TDataModuleClientes Name = 'AGENTE' DataType = datString Size = 255 + DisplayLabel = 'Clientes_AGENTE' + DictionaryEntry = 'Clientes_AGENTE' end item Name = 'RAPEL' DataType = datSmallInt + DisplayLabel = 'Clientes_RAPEL' + DictionaryEntry = 'Clientes_RAPEL' end item Name = 'EMAIL_ADMINISTRACION' DataType = datString Size = 255 + DisplayLabel = 'Clientes_EMAIL_ADMINISTRACION' + DictionaryEntry = 'Clientes_EMAIL_ADMINISTRACION' end item Name = 'REGIMEN_IVA' @@ -277,10 +309,14 @@ inherited DataModuleClientes: TDataModuleClientes Name = 'CODIGO_ASIGNADO' DataType = datString Size = 255 + DisplayLabel = 'Clientes_CODIGO_ASIGNADO' + DictionaryEntry = 'Clientes_CODIGO_ASIGNADO' end item Name = 'DESCUENTO' DataType = datFloat + DisplayLabel = 'Clientes_DESCUENTO' + DictionaryEntry = 'Clientes_DESCUENTO' end item Name = 'FELICITACION' @@ -292,14 +328,19 @@ inherited DataModuleClientes: TDataModuleClientes Name = 'TIPO_CLIENTE' DataType = datString Size = 255 + DisplayLabel = 'Clientes_TIPO_CLIENTE' + DictionaryEntry = 'Clientes_TIPO_CLIENTE' end item Name = 'SEPA' DataType = datSmallInt + DisplayLabel = 'Clientes_SEPA' + DictionaryEntry = 'Clientes_SEPA' end item Name = 'ID_CENTRAL' DataType = datInteger + DictionaryEntry = 'Clientes_ID_CENTRAL' end> Params = <> StreamingOptions = [soDisableEventsWhileStreaming] @@ -310,13 +351,13 @@ inherited DataModuleClientes: TDataModuleClientes Left = 296 Top = 168 end - object ds_Clientes: TDADataSource + object ds_Clientes: TDADataSource [14] DataSet = tbl_Clientes.Dataset DataTable = tbl_Clientes Left = 296 Top = 232 end - object tbl_ClientesDescuentos: TDAMemDataTable + object tbl_ClientesDescuentos: TDAMemDataTable [15] RemoteUpdatesOptions = [] Fields = < item @@ -365,13 +406,13 @@ inherited DataModuleClientes: TDataModuleClientes Left = 448 Top = 168 end - object ds_ClientesDescuentos: TDADataSource + object ds_ClientesDescuentos: TDADataSource [16] DataSet = tbl_ClientesDescuentos.Dataset DataTable = tbl_ClientesDescuentos Left = 448 Top = 224 end - object tbl_GruposCliente: TDAMemDataTable + object tbl_GruposCliente: TDAMemDataTable [17] RemoteUpdatesOptions = [] Fields = < item @@ -398,13 +439,13 @@ inherited DataModuleClientes: TDataModuleClientes Left = 552 Top = 168 end - object ds_GruposCliente: TDADataSource + object ds_GruposCliente: TDADataSource [18] DataSet = tbl_GruposCliente.Dataset DataTable = tbl_GruposCliente Left = 552 Top = 224 end - object tbl_ClientesDescuentosArticulos: TDAMemDataTable + object tbl_ClientesDescuentosArticulos: TDAMemDataTable [19] RemoteUpdatesOptions = [] Fields = < item @@ -479,13 +520,13 @@ inherited DataModuleClientes: TDataModuleClientes Left = 448 Top = 280 end - object ds_ClientesDescuentosArticulos: TDADataSource + object ds_ClientesDescuentosArticulos: TDADataSource [20] DataSet = tbl_ClientesDescuentosArticulos.Dataset DataTable = tbl_ClientesDescuentosArticulos Left = 448 Top = 336 end - object tbl_TiposCliente: TDAMemDataTable + object tbl_TiposCliente: TDAMemDataTable [21] RemoteUpdatesOptions = [] Fields = < item @@ -511,13 +552,13 @@ inherited DataModuleClientes: TDataModuleClientes Left = 560 Top = 80 end - object ds_TiposCliente: TDADataSource + object ds_TiposCliente: TDADataSource [22] DataSet = tbl_TiposCliente.Dataset DataTable = tbl_TiposCliente Left = 560 Top = 32 end - object tbl_ClientesSucursales: TDAMemDataTable + object tbl_ClientesSucursales: TDAMemDataTable [23] RemoteUpdatesOptions = [] Fields = < item @@ -822,7 +863,7 @@ inherited DataModuleClientes: TDataModuleClientes Left = 296 Top = 288 end - object dsClientesSucursales: TDADataSource + object dsClientesSucursales: TDADataSource [24] DataSet = tbl_ClientesSucursales.Dataset DataTable = tbl_ClientesSucursales Left = 296 diff --git a/Source/Modulos/Contactos/Data/uDataModuleContactos.dfm b/Source/Modulos/Contactos/Data/uDataModuleContactos.dfm index e0e253e..cca6e4e 100644 --- a/Source/Modulos/Contactos/Data/uDataModuleContactos.dfm +++ b/Source/Modulos/Contactos/Data/uDataModuleContactos.dfm @@ -88,6 +88,21 @@ inherited DataModuleContactos: TDataModuleContactos DisplayLabel = 'C'#243'digo postal' DictionaryEntry = 'Contactos_CODIGO_POSTAL' end + item + Name = 'PAIS' + DataType = datString + Size = 255 + end + item + Name = 'IDIOMA_ISO' + DataType = datString + Size = 2 + end + item + Name = 'IDIOMA' + DataType = datString + Size = 255 + end item Name = 'TELEFONO_1' DataType = datString @@ -302,6 +317,11 @@ inherited DataModuleContactos: TDataModuleContactos item Name = 'FECHA_MODIFICACION' DataType = datDateTime + end + item + Name = 'PAIS' + DataType = datString + Size = 255 end> Params = <> MasterMappingMode = mmWhere @@ -534,4 +554,39 @@ inherited DataModuleContactos: TDataModuleContactos Left = 352 Top = 144 end + object tbl_Idiomas: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ID' + DataType = datInteger + Required = True + InPrimaryKey = True + end + item + Name = 'ISO' + DataType = datString + Size = 2 + Required = True + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 255 + Required = True + end> + Params = <> + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteDataAdapter = rda_Contactos + LogicalName = 'Idiomas' + IndexDefs = <> + Left = 40 + Top = 248 + end + object ds_Idiomas: TDADataSource + DataSet = tbl_Idiomas.Dataset + DataTable = tbl_Idiomas + Left = 40 + Top = 200 + end end diff --git a/Source/Modulos/Contactos/Data/uDataModuleContactos.pas b/Source/Modulos/Contactos/Data/uDataModuleContactos.pas index 501d41b..4da996e 100644 --- a/Source/Modulos/Contactos/Data/uDataModuleContactos.pas +++ b/Source/Modulos/Contactos/Data/uDataModuleContactos.pas @@ -7,12 +7,12 @@ uses uDADataTable, uDABINAdapter, uDAScriptingProvider, uDACDSDataTable, uROWinInetHttpChannel, uRORemoteService, uROClient, uROBinMessage, - uBizContactos, uBizContactosDatosBancarios, + uBizContactos, uBizContactosDatosBancarios, uBizDireccionesContacto, uIDataModuleEtiquetasContactosReport, uIDataModuleContactos, uDADesigntimeCall, uROTypes, uRODynamicRequest, uDAInterfaces, uDADataStreamer, uDARemoteDataAdapter, uDABin2DataStreamer, uDAMemDataTable, uDataModuleBase, uBizContactosPersonal, - uIntegerListUtils; + uIntegerListUtils, uBizIdiomas; type TDataModuleContactos = class(TDataModuleBase, IDataModuleContactos, IDataModuleEtiquetasContactosReport) @@ -29,6 +29,8 @@ type ds_PersonalContacto: TDADataSource; tbl_ListaAnosObjetivosAlb: TDAMemDataTable; ds_ListaAnosObjetivosAlb: TDADataSource; + tbl_Idiomas: TDAMemDataTable; + ds_Idiomas: TDADataSource; procedure DAClientDataModuleCreate(Sender: TObject); procedure DataModuleDestroy(Sender: TObject); public @@ -36,7 +38,8 @@ type function _GetDirecciones: IBizDireccionesContacto; function _GetItems (IDCategoria : Integer): IBizContacto; virtual; function _GetPersonal: IBizContactoPersonal; - function NewDireccion : IBizDireccionesContacto; + function GetIdiomas : IBizIdiomas; + function NewDireccion : IBizDireccionesContacto; // Report function GetReport(const ListaID: TIntegerList): Binary; @@ -63,6 +66,20 @@ begin // end; +function TDataModuleContactos.GetIdiomas: IBizIdiomas; +var + AIdiomas : TDAMemDataTable; +begin + ShowHourglassCursor; + try + AIdiomas := CloneDataTable(tbl_Idiomas); + AIdiomas.BusinessRulesID := BIZ_CLIENT_IDIOMAS; + Result := (AIdiomas as IBizIdiomas); + finally + HideHourglassCursor; + end; +end; + function TDataModuleContactos.GetReport(const ListaID: TIntegerList): Binary; var AParam : TIntegerArray; diff --git a/Source/Modulos/Contactos/Data/uDataModuleEmpleados.dfm b/Source/Modulos/Contactos/Data/uDataModuleEmpleados.dfm index 9e07e39..ad9b770 100644 --- a/Source/Modulos/Contactos/Data/uDataModuleEmpleados.dfm +++ b/Source/Modulos/Contactos/Data/uDataModuleEmpleados.dfm @@ -1,164 +1,6 @@ inherited DataModuleEmpleados: TDataModuleEmpleados Height = 302 Width = 543 - inherited tbl_Contactos: TDAMemDataTable - Fields = < - item - Name = 'ID' - DataType = datAutoInc - GeneratorName = 'GEN_CONTACTOS_ID' - ServerAutoRefresh = True - DictionaryEntry = 'Contactos_ID' - InPrimaryKey = True - end - item - Name = 'ID_CATEGORIA' - DataType = datInteger - end - item - Name = 'NIF_CIF' - DataType = datString - Size = 15 - DisplayLabel = 'NIF/CIF' - DictionaryEntry = 'Contactos_NIF_CIF' - end - item - Name = 'NOMBRE' - DataType = datString - Size = 255 - Required = True - DisplayLabel = 'Nombre' - DictionaryEntry = 'Contactos_NOMBRE' - end - item - Name = 'PERSONA_CONTACTO' - DataType = datString - Size = 255 - DisplayLabel = 'Persona de contacto' - DictionaryEntry = 'Contactos_PERSONA_CONTACTO' - end - item - Name = 'CALLE' - DataType = datString - Size = 255 - DisplayLabel = 'Direcci'#243'n' - DictionaryEntry = 'Contactos_CALLE' - end - item - Name = 'POBLACION' - DataType = datString - Size = 255 - DisplayLabel = 'Poblaci'#243'n' - DictionaryEntry = 'Contactos_POBLACION' - end - item - Name = 'PROVINCIA' - DataType = datString - Size = 255 - DisplayLabel = 'Provincia' - DictionaryEntry = 'Contactos_PROVINCIA' - end - item - Name = 'CODIGO_POSTAL' - DataType = datString - Size = 10 - DisplayLabel = 'C'#243'digo postal' - DictionaryEntry = 'Contactos_CODIGO_POSTAL' - end - item - Name = 'TELEFONO_1' - DataType = datString - Size = 25 - DisplayLabel = 'Tlf. trabajo' - DictionaryEntry = 'Contactos_TELEFONO_1' - end - item - Name = 'TELEFONO_2' - DataType = datString - Size = 25 - DisplayLabel = 'Tlf. particular' - DictionaryEntry = 'Contactos_TELEFONO_2' - end - item - Name = 'MOVIL_1' - DataType = datString - Size = 25 - DisplayLabel = 'M'#243'vil' - DictionaryEntry = 'Contactos_MOVIL_1' - end - item - Name = 'MOVIL_2' - DataType = datString - Size = 25 - DictionaryEntry = 'Contactos_MOVIL_2' - end - item - Name = 'FAX' - DataType = datString - Size = 25 - DisplayLabel = 'Fax' - DictionaryEntry = 'Contactos_FAX' - end - item - Name = 'EMAIL_1' - DataType = datString - Size = 255 - DisplayLabel = 'E-mail trabajo' - DictionaryEntry = 'Contactos_EMAIL_1' - end - item - Name = 'EMAIL_2' - DataType = datString - Size = 255 - DisplayLabel = 'E-mail particular' - DictionaryEntry = 'Contactos_EMAIL_2' - end - item - Name = 'PAGINA_WEB' - DataType = datString - Size = 255 - DisplayLabel = 'Web' - DictionaryEntry = 'Contactos_PAGINA_WEB' - end - item - Name = 'NOTAS' - DataType = datMemo - BlobType = dabtMemo - DisplayLabel = 'Observaciones' - DictionaryEntry = 'Contactos_NOTAS' - end - item - Name = 'FECHA_ALTA' - DataType = datDateTime - DisplayLabel = 'Fecha de alta' - DictionaryEntry = 'Contactos_FECHA_ALTA' - end - item - Name = 'FECHA_MODIFICACION' - DataType = datDateTime - DisplayLabel = 'Fecha de modificaci'#243'n' - DictionaryEntry = 'Contactos_FECHA_MODIFICACION' - end - item - Name = 'USUARIO' - DataType = datString - Size = 20 - DisplayLabel = 'Usuario' - DictionaryEntry = 'Contactos_USUARIO' - end - item - Name = 'ID_EMPRESA' - DataType = datInteger - end - item - Name = 'REFERENCIA' - DataType = datString - Size = 255 - DisplayLabel = 'Referencia' - ServerAutoRefresh = True - DictionaryEntry = 'Contactos_REFERENCIA' - end> - end inherited ds_Contactos: TDADataSource DataSet = tbl_Contactos.Dataset end @@ -171,6 +13,9 @@ inherited DataModuleEmpleados: TDataModuleEmpleados inherited ds_PersonalContacto: TDADataSource DataSet = tbl_PersonalContacto.Dataset end + inherited ds_ListaAnosObjetivosAlb: TDADataSource + DataSet = tbl_ListaAnosObjetivosAlb.Dataset + end object tbl_Empleados: TDAMemDataTable RemoteUpdatesOptions = [] Fields = < @@ -237,6 +82,21 @@ inherited DataModuleEmpleados: TDataModuleEmpleados DisplayLabel = 'C'#243'digo postal' DictionaryEntry = 'Contactos_CODIGO_POSTAL' end + item + Name = 'PAIS' + DataType = datString + Size = 255 + end + item + Name = 'IDIOMA_ISO' + DataType = datString + Size = 2 + end + item + Name = 'IDIOMA' + DataType = datString + Size = 255 + end item Name = 'TELEFONO_1' DataType = datString @@ -400,8 +260,6 @@ inherited DataModuleEmpleados: TDataModuleEmpleados StreamingOptions = [soDisableEventsWhileStreaming] RemoteDataAdapter = rda_Contactos LocalDataStreamer = Bin2DataStreamer - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] LogicalName = 'Empleados' IndexDefs = <> Left = 296 @@ -435,8 +293,6 @@ inherited DataModuleEmpleados: TDataModuleEmpleados StreamingOptions = [soDisableEventsWhileStreaming] RemoteDataAdapter = rda_Contactos LocalDataStreamer = Bin2DataStreamer - DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch] - MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates] LogicalName = 'GruposEmpleado' IndexDefs = <> Left = 448 diff --git a/Source/Modulos/Contactos/Data/uDataModuleProveedores.dfm b/Source/Modulos/Contactos/Data/uDataModuleProveedores.dfm index e8ab7b0..e26adad 100644 --- a/Source/Modulos/Contactos/Data/uDataModuleProveedores.dfm +++ b/Source/Modulos/Contactos/Data/uDataModuleProveedores.dfm @@ -19,6 +19,9 @@ inherited DataModuleProveedores: TDataModuleProveedores Left = 408 Top = 240 end + inherited ds_ListaAnosObjetivosAlb: TDADataSource + DataSet = tbl_ListaAnosObjetivosAlb.Dataset + end object tbl_GruposProveedor: TDAMemDataTable RemoteUpdatesOptions = [] Fields = < @@ -118,6 +121,21 @@ inherited DataModuleProveedores: TDataModuleProveedores DisplayLabel = 'C'#243'digo postal' DictionaryEntry = 'Contactos_CODIGO_POSTAL' end + item + Name = 'PAIS' + DataType = datString + Size = 255 + end + item + Name = 'IDIOMA_ISO' + DataType = datString + Size = 2 + end + item + Name = 'IDIOMA' + DataType = datString + Size = 255 + end item Name = 'TELEFONO_1' DataType = datString @@ -296,11 +314,6 @@ inherited DataModuleProveedores: TDataModuleProveedores item Name = 'VENCIMIENTO_FACTURAS_3' DataType = datSmallInt - end - item - Name = 'PAIS' - DataType = datString - Size = 255 end> Params = <> StreamingOptions = [soDisableEventsWhileStreaming] diff --git a/Source/Modulos/Contactos/Model/Contactos_model.dpk b/Source/Modulos/Contactos/Model/Contactos_model.dpk index aa25b09..6772523 100644 --- a/Source/Modulos/Contactos/Model/Contactos_model.dpk +++ b/Source/Modulos/Contactos/Model/Contactos_model.dpk @@ -60,6 +60,7 @@ contains uBizClientesDescuentos in 'uBizClientesDescuentos.pas', uBizAgentesObjetivosFacturas in 'uBizAgentesObjetivosFacturas.pas', uBizAgentesObjetivosAlbaranes in 'uBizAgentesObjetivosAlbaranes.pas', - uBizTiposCliente in 'uBizTiposCliente.pas'; + uBizTiposCliente in 'uBizTiposCliente.pas', + uBizIdiomas in 'uBizIdiomas.pas'; end. diff --git a/Source/Modulos/Contactos/Model/Contactos_model.dproj b/Source/Modulos/Contactos/Model/Contactos_model.dproj index 9bbc68e..b7a49a7 100644 --- a/Source/Modulos/Contactos/Model/Contactos_model.dproj +++ b/Source/Modulos/Contactos/Model/Contactos_model.dproj @@ -50,17 +50,10 @@ MainSource - - - - - - - - - - - + + + + @@ -68,6 +61,11 @@ + + + + + @@ -82,7 +80,10 @@ + + + \ No newline at end of file +EurekaLog Last Line --> diff --git a/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.dfm b/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.dfm index e65c906..f3b416c 100644 --- a/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.dfm +++ b/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.dfm @@ -217,15 +217,6 @@ inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente DataType = datInteger DictionaryEntry = 'PresupuestosCliente_ID_FORMA_PAGO' end - item - Name = 'ID_FACTURA_PROFORMA' - DataType = datInteger - end - item - Name = 'FACTURA_PROFORMA' - DataType = datString - Size = 255 - end item Name = 'PERSONA_CONTACTO' DataType = datString @@ -255,6 +246,11 @@ inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente item Name = 'ID_TIPO_IVA' DataType = datInteger + end + item + Name = 'REFERENCIA_FACTURA_PROFORMA' + DataType = datString + Size = 255 end> Params = <> StreamingOptions = [soDisableEventsWhileStreaming] diff --git a/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteClient_Intf.pas b/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteClient_Intf.pas index bd66f6a..82c542c 100644 --- a/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteClient_Intf.pas +++ b/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteClient_Intf.pas @@ -9,9 +9,9 @@ const { Data table rules ids Feel free to change them to something more human readable but make sure they are unique in the context of your application } - RID_ListaAnosPresupuestos = '{A4D408B4-9527-45F7-9A1C-536B4FB19884}'; - RID_PresupuestosCliente = '{1544B06D-1221-46F4-AFF1-D58C4B1AE295}'; - RID_PresupuestosCliente_Detalles = '{F13AC3B1-BB99-490A-B13A-2F495F3944C5}'; + RID_ListaAnosPresupuestos = '{0DFD9AC5-2B0E-4391-A5AD-D2972D58E463}'; + RID_PresupuestosCliente = '{F3013194-911B-415B-A792-25AF245FF2B2}'; + RID_PresupuestosCliente_Detalles = '{EC5C0790-12D9-4C7D-9254-32E249A3F2F7}'; { Data table names } nme_ListaAnosPresupuestos = 'ListaAnosPresupuestos'; @@ -55,14 +55,13 @@ const fld_PresupuestosClienteIMPORTE_IVA = 'IMPORTE_IVA'; fld_PresupuestosClienteIMPORTE_TOTAL = 'IMPORTE_TOTAL'; fld_PresupuestosClienteID_FORMA_PAGO = 'ID_FORMA_PAGO'; - fld_PresupuestosClienteID_FACTURA_PROFORMA = 'ID_FACTURA_PROFORMA'; - fld_PresupuestosClienteFACTURA_PROFORMA = 'FACTURA_PROFORMA'; fld_PresupuestosClientePERSONA_CONTACTO = 'PERSONA_CONTACTO'; fld_PresupuestosClienteDESCRIPCION_BONIFICACION = 'DESCRIPCION_BONIFICACION'; fld_PresupuestosClienteIMPORTE_BONIFICACION = 'IMPORTE_BONIFICACION'; fld_PresupuestosClienteFECHA_VIGENCIA = 'FECHA_VIGENCIA'; fld_PresupuestosClienteTIPO_PRESUPUESTO = 'TIPO_PRESUPUESTO'; fld_PresupuestosClienteID_TIPO_IVA = 'ID_TIPO_IVA'; + fld_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA = 'REFERENCIA_FACTURA_PROFORMA'; { PresupuestosCliente field indexes } idx_PresupuestosClienteID = 0; @@ -95,14 +94,13 @@ const idx_PresupuestosClienteIMPORTE_IVA = 27; idx_PresupuestosClienteIMPORTE_TOTAL = 28; idx_PresupuestosClienteID_FORMA_PAGO = 29; - idx_PresupuestosClienteID_FACTURA_PROFORMA = 30; - idx_PresupuestosClienteFACTURA_PROFORMA = 31; - idx_PresupuestosClientePERSONA_CONTACTO = 32; - idx_PresupuestosClienteDESCRIPCION_BONIFICACION = 33; - idx_PresupuestosClienteIMPORTE_BONIFICACION = 34; - idx_PresupuestosClienteFECHA_VIGENCIA = 35; - idx_PresupuestosClienteTIPO_PRESUPUESTO = 36; - idx_PresupuestosClienteID_TIPO_IVA = 37; + idx_PresupuestosClientePERSONA_CONTACTO = 30; + idx_PresupuestosClienteDESCRIPCION_BONIFICACION = 31; + idx_PresupuestosClienteIMPORTE_BONIFICACION = 32; + idx_PresupuestosClienteFECHA_VIGENCIA = 33; + idx_PresupuestosClienteTIPO_PRESUPUESTO = 34; + idx_PresupuestosClienteID_TIPO_IVA = 35; + idx_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA = 36; { PresupuestosCliente_Detalles fields } fld_PresupuestosCliente_DetallesID = 'ID'; @@ -141,7 +139,7 @@ const type { IListaAnosPresupuestos } IListaAnosPresupuestos = interface(IDAStronglyTypedDataTable) - ['{C610654D-7E6C-4A10-8CDC-BFA1C6D3AB09}'] + ['{B096570B-EC83-4316-88E0-9C42EFFA2CD3}'] { Property getters and setters } function GetANOValue: String; procedure SetANOValue(const aValue: String); @@ -176,7 +174,7 @@ type { IPresupuestosCliente } IPresupuestosCliente = interface(IDAStronglyTypedDataTable) - ['{EB145AB3-4E1A-48E4-8972-96CBFCC6A5BA}'] + ['{D25B93AB-F578-4F0A-8DD3-FE58DA2C6F92}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -294,14 +292,6 @@ type procedure SetID_FORMA_PAGOValue(const aValue: Integer); function GetID_FORMA_PAGOIsNull: Boolean; procedure SetID_FORMA_PAGOIsNull(const aValue: Boolean); - function GetID_FACTURA_PROFORMAValue: Integer; - procedure SetID_FACTURA_PROFORMAValue(const aValue: Integer); - function GetID_FACTURA_PROFORMAIsNull: Boolean; - procedure SetID_FACTURA_PROFORMAIsNull(const aValue: Boolean); - function GetFACTURA_PROFORMAValue: String; - procedure SetFACTURA_PROFORMAValue(const aValue: String); - function GetFACTURA_PROFORMAIsNull: Boolean; - procedure SetFACTURA_PROFORMAIsNull(const aValue: Boolean); function GetPERSONA_CONTACTOValue: String; procedure SetPERSONA_CONTACTOValue(const aValue: String); function GetPERSONA_CONTACTOIsNull: Boolean; @@ -326,6 +316,10 @@ type procedure SetID_TIPO_IVAValue(const aValue: Integer); function GetID_TIPO_IVAIsNull: Boolean; procedure SetID_TIPO_IVAIsNull(const aValue: Boolean); + function GetREFERENCIA_FACTURA_PROFORMAValue: String; + procedure SetREFERENCIA_FACTURA_PROFORMAValue(const aValue: String); + function GetREFERENCIA_FACTURA_PROFORMAIsNull: Boolean; + procedure SetREFERENCIA_FACTURA_PROFORMAIsNull(const aValue: Boolean); { Properties } @@ -389,10 +383,6 @@ type property IMPORTE_TOTALIsNull: Boolean read GetIMPORTE_TOTALIsNull write SetIMPORTE_TOTALIsNull; property ID_FORMA_PAGO: Integer read GetID_FORMA_PAGOValue write SetID_FORMA_PAGOValue; property ID_FORMA_PAGOIsNull: Boolean read GetID_FORMA_PAGOIsNull write SetID_FORMA_PAGOIsNull; - property ID_FACTURA_PROFORMA: Integer read GetID_FACTURA_PROFORMAValue write SetID_FACTURA_PROFORMAValue; - property ID_FACTURA_PROFORMAIsNull: Boolean read GetID_FACTURA_PROFORMAIsNull write SetID_FACTURA_PROFORMAIsNull; - property FACTURA_PROFORMA: String read GetFACTURA_PROFORMAValue write SetFACTURA_PROFORMAValue; - property FACTURA_PROFORMAIsNull: Boolean read GetFACTURA_PROFORMAIsNull write SetFACTURA_PROFORMAIsNull; property PERSONA_CONTACTO: String read GetPERSONA_CONTACTOValue write SetPERSONA_CONTACTOValue; property PERSONA_CONTACTOIsNull: Boolean read GetPERSONA_CONTACTOIsNull write SetPERSONA_CONTACTOIsNull; property DESCRIPCION_BONIFICACION: String read GetDESCRIPCION_BONIFICACIONValue write SetDESCRIPCION_BONIFICACIONValue; @@ -405,6 +395,8 @@ type property TIPO_PRESUPUESTOIsNull: Boolean read GetTIPO_PRESUPUESTOIsNull write SetTIPO_PRESUPUESTOIsNull; property ID_TIPO_IVA: Integer read GetID_TIPO_IVAValue write SetID_TIPO_IVAValue; property ID_TIPO_IVAIsNull: Boolean read GetID_TIPO_IVAIsNull write SetID_TIPO_IVAIsNull; + property REFERENCIA_FACTURA_PROFORMA: String read GetREFERENCIA_FACTURA_PROFORMAValue write SetREFERENCIA_FACTURA_PROFORMAValue; + property REFERENCIA_FACTURA_PROFORMAIsNull: Boolean read GetREFERENCIA_FACTURA_PROFORMAIsNull write SetREFERENCIA_FACTURA_PROFORMAIsNull; end; { TPresupuestosClienteDataTableRules } @@ -536,14 +528,6 @@ type procedure SetID_FORMA_PAGOValue(const aValue: Integer); virtual; function GetID_FORMA_PAGOIsNull: Boolean; virtual; procedure SetID_FORMA_PAGOIsNull(const aValue: Boolean); virtual; - function GetID_FACTURA_PROFORMAValue: Integer; virtual; - procedure SetID_FACTURA_PROFORMAValue(const aValue: Integer); virtual; - function GetID_FACTURA_PROFORMAIsNull: Boolean; virtual; - procedure SetID_FACTURA_PROFORMAIsNull(const aValue: Boolean); virtual; - function GetFACTURA_PROFORMAValue: String; virtual; - procedure SetFACTURA_PROFORMAValue(const aValue: String); virtual; - function GetFACTURA_PROFORMAIsNull: Boolean; virtual; - procedure SetFACTURA_PROFORMAIsNull(const aValue: Boolean); virtual; function GetPERSONA_CONTACTOValue: String; virtual; procedure SetPERSONA_CONTACTOValue(const aValue: String); virtual; function GetPERSONA_CONTACTOIsNull: Boolean; virtual; @@ -568,6 +552,10 @@ type procedure SetID_TIPO_IVAValue(const aValue: Integer); virtual; function GetID_TIPO_IVAIsNull: Boolean; virtual; procedure SetID_TIPO_IVAIsNull(const aValue: Boolean); virtual; + function GetREFERENCIA_FACTURA_PROFORMAValue: String; virtual; + procedure SetREFERENCIA_FACTURA_PROFORMAValue(const aValue: String); virtual; + function GetREFERENCIA_FACTURA_PROFORMAIsNull: Boolean; virtual; + procedure SetREFERENCIA_FACTURA_PROFORMAIsNull(const aValue: Boolean); virtual; { Properties } property ID: Integer read GetIDValue write SetIDValue; @@ -630,10 +618,6 @@ type property IMPORTE_TOTALIsNull: Boolean read GetIMPORTE_TOTALIsNull write SetIMPORTE_TOTALIsNull; property ID_FORMA_PAGO: Integer read GetID_FORMA_PAGOValue write SetID_FORMA_PAGOValue; property ID_FORMA_PAGOIsNull: Boolean read GetID_FORMA_PAGOIsNull write SetID_FORMA_PAGOIsNull; - property ID_FACTURA_PROFORMA: Integer read GetID_FACTURA_PROFORMAValue write SetID_FACTURA_PROFORMAValue; - property ID_FACTURA_PROFORMAIsNull: Boolean read GetID_FACTURA_PROFORMAIsNull write SetID_FACTURA_PROFORMAIsNull; - property FACTURA_PROFORMA: String read GetFACTURA_PROFORMAValue write SetFACTURA_PROFORMAValue; - property FACTURA_PROFORMAIsNull: Boolean read GetFACTURA_PROFORMAIsNull write SetFACTURA_PROFORMAIsNull; property PERSONA_CONTACTO: String read GetPERSONA_CONTACTOValue write SetPERSONA_CONTACTOValue; property PERSONA_CONTACTOIsNull: Boolean read GetPERSONA_CONTACTOIsNull write SetPERSONA_CONTACTOIsNull; property DESCRIPCION_BONIFICACION: String read GetDESCRIPCION_BONIFICACIONValue write SetDESCRIPCION_BONIFICACIONValue; @@ -646,6 +630,8 @@ type property TIPO_PRESUPUESTOIsNull: Boolean read GetTIPO_PRESUPUESTOIsNull write SetTIPO_PRESUPUESTOIsNull; property ID_TIPO_IVA: Integer read GetID_TIPO_IVAValue write SetID_TIPO_IVAValue; property ID_TIPO_IVAIsNull: Boolean read GetID_TIPO_IVAIsNull write SetID_TIPO_IVAIsNull; + property REFERENCIA_FACTURA_PROFORMA: String read GetREFERENCIA_FACTURA_PROFORMAValue write SetREFERENCIA_FACTURA_PROFORMAValue; + property REFERENCIA_FACTURA_PROFORMAIsNull: Boolean read GetREFERENCIA_FACTURA_PROFORMAIsNull write SetREFERENCIA_FACTURA_PROFORMAIsNull; public constructor Create(aDataTable: TDADataTable); override; @@ -655,7 +641,7 @@ type { IPresupuestosCliente_Detalles } IPresupuestosCliente_Detalles = interface(IDAStronglyTypedDataTable) - ['{3A6F2B7A-EDAF-4606-B8CE-B24BED8ECBB7}'] + ['{B69BE1A7-680A-4746-9126-47FD4BE7A252}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -1556,48 +1542,6 @@ begin DataTable.Fields[idx_PresupuestosClienteID_FORMA_PAGO].AsVariant := Null; end; -function TPresupuestosClienteDataTableRules.GetID_FACTURA_PROFORMAValue: Integer; -begin - result := DataTable.Fields[idx_PresupuestosClienteID_FACTURA_PROFORMA].AsInteger; -end; - -procedure TPresupuestosClienteDataTableRules.SetID_FACTURA_PROFORMAValue(const aValue: Integer); -begin - DataTable.Fields[idx_PresupuestosClienteID_FACTURA_PROFORMA].AsInteger := aValue; -end; - -function TPresupuestosClienteDataTableRules.GetID_FACTURA_PROFORMAIsNull: boolean; -begin - result := DataTable.Fields[idx_PresupuestosClienteID_FACTURA_PROFORMA].IsNull; -end; - -procedure TPresupuestosClienteDataTableRules.SetID_FACTURA_PROFORMAIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_PresupuestosClienteID_FACTURA_PROFORMA].AsVariant := Null; -end; - -function TPresupuestosClienteDataTableRules.GetFACTURA_PROFORMAValue: String; -begin - result := DataTable.Fields[idx_PresupuestosClienteFACTURA_PROFORMA].AsString; -end; - -procedure TPresupuestosClienteDataTableRules.SetFACTURA_PROFORMAValue(const aValue: String); -begin - DataTable.Fields[idx_PresupuestosClienteFACTURA_PROFORMA].AsString := aValue; -end; - -function TPresupuestosClienteDataTableRules.GetFACTURA_PROFORMAIsNull: boolean; -begin - result := DataTable.Fields[idx_PresupuestosClienteFACTURA_PROFORMA].IsNull; -end; - -procedure TPresupuestosClienteDataTableRules.SetFACTURA_PROFORMAIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_PresupuestosClienteFACTURA_PROFORMA].AsVariant := Null; -end; - function TPresupuestosClienteDataTableRules.GetPERSONA_CONTACTOValue: String; begin result := DataTable.Fields[idx_PresupuestosClientePERSONA_CONTACTO].AsString; @@ -1724,6 +1668,27 @@ begin DataTable.Fields[idx_PresupuestosClienteID_TIPO_IVA].AsVariant := Null; end; +function TPresupuestosClienteDataTableRules.GetREFERENCIA_FACTURA_PROFORMAValue: String; +begin + result := DataTable.Fields[idx_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA].AsString; +end; + +procedure TPresupuestosClienteDataTableRules.SetREFERENCIA_FACTURA_PROFORMAValue(const aValue: String); +begin + DataTable.Fields[idx_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA].AsString := aValue; +end; + +function TPresupuestosClienteDataTableRules.GetREFERENCIA_FACTURA_PROFORMAIsNull: boolean; +begin + result := DataTable.Fields[idx_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA].IsNull; +end; + +procedure TPresupuestosClienteDataTableRules.SetREFERENCIA_FACTURA_PROFORMAIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA].AsVariant := Null; +end; + { TPresupuestosCliente_DetallesDataTableRules } constructor TPresupuestosCliente_DetallesDataTableRules.Create(aDataTable: TDADataTable); diff --git a/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteServer_Intf.pas b/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteServer_Intf.pas index 33d6c97..beb56a7 100644 --- a/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteServer_Intf.pas +++ b/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteServer_Intf.pas @@ -9,14 +9,14 @@ const { Delta rules ids Feel free to change them to something more human readable but make sure they are unique in the context of your application } - RID_ListaAnosPresupuestosDelta = '{64A0D3FB-00DD-4AB8-A593-BBCD65384819}'; - RID_PresupuestosClienteDelta = '{58B1773F-4AD1-42C4-B37D-A211DA2B6130}'; - RID_PresupuestosCliente_DetallesDelta = '{61BEA975-8449-48D5-AE10-E049BFF6FF92}'; + RID_ListaAnosPresupuestosDelta = '{1BD24E51-7782-44FE-93E8-8C6BC7D478B2}'; + RID_PresupuestosClienteDelta = '{38421517-6CF1-413E-B935-F0E9E5738EA1}'; + RID_PresupuestosCliente_DetallesDelta = '{0F8DB91C-0111-4BAE-9B54-1DF8F0668885}'; type { IListaAnosPresupuestosDelta } IListaAnosPresupuestosDelta = interface(IListaAnosPresupuestos) - ['{64A0D3FB-00DD-4AB8-A593-BBCD65384819}'] + ['{1BD24E51-7782-44FE-93E8-8C6BC7D478B2}'] { Property getters and setters } function GetOldANOValue : String; @@ -50,7 +50,7 @@ type { IPresupuestosClienteDelta } IPresupuestosClienteDelta = interface(IPresupuestosCliente) - ['{58B1773F-4AD1-42C4-B37D-A211DA2B6130}'] + ['{38421517-6CF1-413E-B935-F0E9E5738EA1}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -82,14 +82,13 @@ type function GetOldIMPORTE_IVAValue : Currency; function GetOldIMPORTE_TOTALValue : Currency; function GetOldID_FORMA_PAGOValue : Integer; - function GetOldID_FACTURA_PROFORMAValue : Integer; - function GetOldFACTURA_PROFORMAValue : String; function GetOldPERSONA_CONTACTOValue : String; function GetOldDESCRIPCION_BONIFICACIONValue : String; function GetOldIMPORTE_BONIFICACIONValue : Currency; function GetOldFECHA_VIGENCIAValue : DateTime; function GetOldTIPO_PRESUPUESTOValue : String; function GetOldID_TIPO_IVAValue : Integer; + function GetOldREFERENCIA_FACTURA_PROFORMAValue : String; { Properties } property OldID : Integer read GetOldIDValue; @@ -122,14 +121,13 @@ type property OldIMPORTE_IVA : Currency read GetOldIMPORTE_IVAValue; property OldIMPORTE_TOTAL : Currency read GetOldIMPORTE_TOTALValue; property OldID_FORMA_PAGO : Integer read GetOldID_FORMA_PAGOValue; - property OldID_FACTURA_PROFORMA : Integer read GetOldID_FACTURA_PROFORMAValue; - property OldFACTURA_PROFORMA : String read GetOldFACTURA_PROFORMAValue; property OldPERSONA_CONTACTO : String read GetOldPERSONA_CONTACTOValue; property OldDESCRIPCION_BONIFICACION : String read GetOldDESCRIPCION_BONIFICACIONValue; property OldIMPORTE_BONIFICACION : Currency read GetOldIMPORTE_BONIFICACIONValue; property OldFECHA_VIGENCIA : DateTime read GetOldFECHA_VIGENCIAValue; property OldTIPO_PRESUPUESTO : String read GetOldTIPO_PRESUPUESTOValue; property OldID_TIPO_IVA : Integer read GetOldID_TIPO_IVAValue; + property OldREFERENCIA_FACTURA_PROFORMA : String read GetOldREFERENCIA_FACTURA_PROFORMAValue; end; { TPresupuestosClienteBusinessProcessorRules } @@ -321,18 +319,6 @@ type function GetOldID_FORMA_PAGOIsNull: Boolean; virtual; procedure SetID_FORMA_PAGOValue(const aValue: Integer); virtual; procedure SetID_FORMA_PAGOIsNull(const aValue: Boolean); virtual; - function GetID_FACTURA_PROFORMAValue: Integer; virtual; - function GetID_FACTURA_PROFORMAIsNull: Boolean; virtual; - function GetOldID_FACTURA_PROFORMAValue: Integer; virtual; - function GetOldID_FACTURA_PROFORMAIsNull: Boolean; virtual; - procedure SetID_FACTURA_PROFORMAValue(const aValue: Integer); virtual; - procedure SetID_FACTURA_PROFORMAIsNull(const aValue: Boolean); virtual; - function GetFACTURA_PROFORMAValue: String; virtual; - function GetFACTURA_PROFORMAIsNull: Boolean; virtual; - function GetOldFACTURA_PROFORMAValue: String; virtual; - function GetOldFACTURA_PROFORMAIsNull: Boolean; virtual; - procedure SetFACTURA_PROFORMAValue(const aValue: String); virtual; - procedure SetFACTURA_PROFORMAIsNull(const aValue: Boolean); virtual; function GetPERSONA_CONTACTOValue: String; virtual; function GetPERSONA_CONTACTOIsNull: Boolean; virtual; function GetOldPERSONA_CONTACTOValue: String; virtual; @@ -369,6 +355,12 @@ type function GetOldID_TIPO_IVAIsNull: Boolean; virtual; procedure SetID_TIPO_IVAValue(const aValue: Integer); virtual; procedure SetID_TIPO_IVAIsNull(const aValue: Boolean); virtual; + function GetREFERENCIA_FACTURA_PROFORMAValue: String; virtual; + function GetREFERENCIA_FACTURA_PROFORMAIsNull: Boolean; virtual; + function GetOldREFERENCIA_FACTURA_PROFORMAValue: String; virtual; + function GetOldREFERENCIA_FACTURA_PROFORMAIsNull: Boolean; virtual; + procedure SetREFERENCIA_FACTURA_PROFORMAValue(const aValue: String); virtual; + procedure SetREFERENCIA_FACTURA_PROFORMAIsNull(const aValue: Boolean); virtual; { Properties } property ID : Integer read GetIDValue write SetIDValue; @@ -491,14 +483,6 @@ type property ID_FORMA_PAGOIsNull : Boolean read GetID_FORMA_PAGOIsNull write SetID_FORMA_PAGOIsNull; property OldID_FORMA_PAGO : Integer read GetOldID_FORMA_PAGOValue; property OldID_FORMA_PAGOIsNull : Boolean read GetOldID_FORMA_PAGOIsNull; - property ID_FACTURA_PROFORMA : Integer read GetID_FACTURA_PROFORMAValue write SetID_FACTURA_PROFORMAValue; - property ID_FACTURA_PROFORMAIsNull : Boolean read GetID_FACTURA_PROFORMAIsNull write SetID_FACTURA_PROFORMAIsNull; - property OldID_FACTURA_PROFORMA : Integer read GetOldID_FACTURA_PROFORMAValue; - property OldID_FACTURA_PROFORMAIsNull : Boolean read GetOldID_FACTURA_PROFORMAIsNull; - property FACTURA_PROFORMA : String read GetFACTURA_PROFORMAValue write SetFACTURA_PROFORMAValue; - property FACTURA_PROFORMAIsNull : Boolean read GetFACTURA_PROFORMAIsNull write SetFACTURA_PROFORMAIsNull; - property OldFACTURA_PROFORMA : String read GetOldFACTURA_PROFORMAValue; - property OldFACTURA_PROFORMAIsNull : Boolean read GetOldFACTURA_PROFORMAIsNull; property PERSONA_CONTACTO : String read GetPERSONA_CONTACTOValue write SetPERSONA_CONTACTOValue; property PERSONA_CONTACTOIsNull : Boolean read GetPERSONA_CONTACTOIsNull write SetPERSONA_CONTACTOIsNull; property OldPERSONA_CONTACTO : String read GetOldPERSONA_CONTACTOValue; @@ -523,6 +507,10 @@ type property ID_TIPO_IVAIsNull : Boolean read GetID_TIPO_IVAIsNull write SetID_TIPO_IVAIsNull; property OldID_TIPO_IVA : Integer read GetOldID_TIPO_IVAValue; property OldID_TIPO_IVAIsNull : Boolean read GetOldID_TIPO_IVAIsNull; + property REFERENCIA_FACTURA_PROFORMA : String read GetREFERENCIA_FACTURA_PROFORMAValue write SetREFERENCIA_FACTURA_PROFORMAValue; + property REFERENCIA_FACTURA_PROFORMAIsNull : Boolean read GetREFERENCIA_FACTURA_PROFORMAIsNull write SetREFERENCIA_FACTURA_PROFORMAIsNull; + property OldREFERENCIA_FACTURA_PROFORMA : String read GetOldREFERENCIA_FACTURA_PROFORMAValue; + property OldREFERENCIA_FACTURA_PROFORMAIsNull : Boolean read GetOldREFERENCIA_FACTURA_PROFORMAIsNull; public constructor Create(aBusinessProcessor: TDABusinessProcessor); override; @@ -532,7 +520,7 @@ type { IPresupuestosCliente_DetallesDelta } IPresupuestosCliente_DetallesDelta = interface(IPresupuestosCliente_Detalles) - ['{61BEA975-8449-48D5-AE10-E049BFF6FF92}'] + ['{0F8DB91C-0111-4BAE-9B54-1DF8F0668885}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_PRESUPUESTOValue : Integer; @@ -1747,68 +1735,6 @@ begin BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteID_FORMA_PAGO] := Null; end; -function TPresupuestosClienteBusinessProcessorRules.GetID_FACTURA_PROFORMAValue: Integer; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteID_FACTURA_PROFORMA]; -end; - -function TPresupuestosClienteBusinessProcessorRules.GetID_FACTURA_PROFORMAIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteID_FACTURA_PROFORMA]); -end; - -function TPresupuestosClienteBusinessProcessorRules.GetOldID_FACTURA_PROFORMAValue: Integer; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_PresupuestosClienteID_FACTURA_PROFORMA]; -end; - -function TPresupuestosClienteBusinessProcessorRules.GetOldID_FACTURA_PROFORMAIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PresupuestosClienteID_FACTURA_PROFORMA]); -end; - -procedure TPresupuestosClienteBusinessProcessorRules.SetID_FACTURA_PROFORMAValue(const aValue: Integer); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteID_FACTURA_PROFORMA] := aValue; -end; - -procedure TPresupuestosClienteBusinessProcessorRules.SetID_FACTURA_PROFORMAIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteID_FACTURA_PROFORMA] := Null; -end; - -function TPresupuestosClienteBusinessProcessorRules.GetFACTURA_PROFORMAValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteFACTURA_PROFORMA]; -end; - -function TPresupuestosClienteBusinessProcessorRules.GetFACTURA_PROFORMAIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteFACTURA_PROFORMA]); -end; - -function TPresupuestosClienteBusinessProcessorRules.GetOldFACTURA_PROFORMAValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_PresupuestosClienteFACTURA_PROFORMA]; -end; - -function TPresupuestosClienteBusinessProcessorRules.GetOldFACTURA_PROFORMAIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PresupuestosClienteFACTURA_PROFORMA]); -end; - -procedure TPresupuestosClienteBusinessProcessorRules.SetFACTURA_PROFORMAValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteFACTURA_PROFORMA] := aValue; -end; - -procedure TPresupuestosClienteBusinessProcessorRules.SetFACTURA_PROFORMAIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteFACTURA_PROFORMA] := Null; -end; - function TPresupuestosClienteBusinessProcessorRules.GetPERSONA_CONTACTOValue: String; begin result := BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClientePERSONA_CONTACTO]; @@ -1995,6 +1921,37 @@ begin BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteID_TIPO_IVA] := Null; end; +function TPresupuestosClienteBusinessProcessorRules.GetREFERENCIA_FACTURA_PROFORMAValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA]; +end; + +function TPresupuestosClienteBusinessProcessorRules.GetREFERENCIA_FACTURA_PROFORMAIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA]); +end; + +function TPresupuestosClienteBusinessProcessorRules.GetOldREFERENCIA_FACTURA_PROFORMAValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA]; +end; + +function TPresupuestosClienteBusinessProcessorRules.GetOldREFERENCIA_FACTURA_PROFORMAIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA]); +end; + +procedure TPresupuestosClienteBusinessProcessorRules.SetREFERENCIA_FACTURA_PROFORMAValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA] := aValue; +end; + +procedure TPresupuestosClienteBusinessProcessorRules.SetREFERENCIA_FACTURA_PROFORMAIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PresupuestosClienteREFERENCIA_FACTURA_PROFORMA] := Null; +end; + { TPresupuestosCliente_DetallesBusinessProcessorRules } constructor TPresupuestosCliente_DetallesBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); diff --git a/Source/Modulos/Presupuestos de cliente/PresupuestosCliente_Group.groupproj b/Source/Modulos/Presupuestos de cliente/PresupuestosCliente_Group.groupproj index 0c25984..205e721 100644 --- a/Source/Modulos/Presupuestos de cliente/PresupuestosCliente_Group.groupproj +++ b/Source/Modulos/Presupuestos de cliente/PresupuestosCliente_Group.groupproj @@ -25,7 +25,10 @@ + + + @@ -301,14 +304,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + \ No newline at end of file diff --git a/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.dfm b/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.dfm index 8e3200c..bba438f 100644 --- a/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.dfm +++ b/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.dfm @@ -360,11 +360,12 @@ object RptPresupuestosCliente: TRptPresupuestosCliente ' COALESCE(CONTACTOS_DIRECCIONES.PROVINCIA, CONTACTOS.PROVINCIA)' + ' AS PROVINCIA,'#10' COALESCE(CONTACTOS_DIRECCIONES.CODIGO_POSTAL,' + ' CONTACTOS.CODIGO_POSTAL) AS CODIGO_POSTAL,'#10' V_PRESUPUESTOS_C' + - 'LIENTE.PERSONA_CONTACTO'#10'FROM'#10' V_PRESUPUESTOS_CLIENTE'#10' INNE' + - 'R JOIN CONTACTOS ON (CONTACTOS.ID = V_PRESUPUESTOS_CLIENTE.ID_CL' + - 'IENTE)'#10' LEFT OUTER JOIN CONTACTOS_DIRECCIONES ON (CONTACTOS_D' + - 'IRECCIONES.ID = V_PRESUPUESTOS_CLIENTE.ID_DIRECCION)'#10'WHERE'#10' V' + - '_PRESUPUESTOS_CLIENTE.ID = :ID'#10' '#10' '#10' '#10' '#10#10#10#10 + 'LIENTE.PERSONA_CONTACTO,'#10' CONTACTOS.IDIOMA_ISO'#10'FROM'#10' V_PRE' + + 'SUPUESTOS_CLIENTE'#10' INNER JOIN CONTACTOS ON (CONTACTOS.ID = V_' + + 'PRESUPUESTOS_CLIENTE.ID_CLIENTE)'#10' LEFT OUTER JOIN CONTACTOS_D' + + 'IRECCIONES ON (CONTACTOS_DIRECCIONES.ID = V_PRESUPUESTOS_CLIENTE' + + '.ID_DIRECCION)'#10'WHERE'#10' V_PRESUPUESTOS_CLIENTE.ID = :ID'#10' '#10' ' + + ' '#10' '#10' '#10#10#10#10 StatementType = stSQL ColumnMappings = < item @@ -470,6 +471,10 @@ object RptPresupuestosCliente: TRptPresupuestosCliente item DatasetField = 'INCIDENCIAS_ACTIVAS' TableField = 'INCIDENCIAS_ACTIVAS' + end + item + DatasetField = 'IDIOMA_ISO' + TableField = 'IDIOMA_ISO' end> end> Name = 'Informe_Cabecera' @@ -589,6 +594,11 @@ object RptPresupuestosCliente: TRptPresupuestosCliente Name = 'PERSONA_CONTACTO' DataType = datString Size = 255 + end + item + Name = 'IDIOMA_ISO' + DataType = datString + Size = 2 end> ReadOnly = True end @@ -933,6 +943,11 @@ object RptPresupuestosCliente: TRptPresupuestosCliente Name = 'PERSONA_CONTACTO' DataType = datString Size = 255 + end + item + Name = 'IDIOMA_ISO' + DataType = datString + Size = 2 end> Params = < item diff --git a/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.pas b/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.pas index 07ee767..fbbd698 100644 --- a/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.pas +++ b/Source/Modulos/Presupuestos de cliente/Reports/uRptPresupuestosCliente_Server.pas @@ -518,7 +518,7 @@ begin tbl_Cabecera.Active := True; tbl_Detalles.Active := True; - AInforme := DarRutaFichero(DarRutaInformes, rptInforme, tbl_Cabecera.FieldByName('ID_EMPRESA').AsString); + AInforme := DarRutaFichero(DarRutaInformes, rptInforme, tbl_Cabecera.FieldByName('ID_EMPRESA').AsString, tbl_Cabecera.FieldByName('IDIOMA_ISO').AsString); if VarIsNull(AInforme) then raise Exception.Create (('Error Servidor: _GenerarPresupuesto, no encuentra informe ' + rptInforme)); diff --git a/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.dfm b/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.dfm index 4beff61..167699d 100644 --- a/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.dfm +++ b/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.dfm @@ -192,12 +192,8 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente TableField = 'ID_TIPO_IVA' end item - DatasetField = 'ID_FACTURA_PROFORMA' - TableField = 'ID_FACTURA_PROFORMA' - end - item - DatasetField = 'FACTURA_PROFORMA' - TableField = 'FACTURA_PROFORMA' + DatasetField = 'REFERENCIA_FACTURA_PROFORMA' + TableField = 'REFERENCIA_FACTURA_PROFORMA' end> end> Name = 'PresupuestosCliente' @@ -364,15 +360,6 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente DataType = datInteger DictionaryEntry = 'PresupuestosCliente_ID_FORMA_PAGO' end - item - Name = 'ID_FACTURA_PROFORMA' - DataType = datInteger - end - item - Name = 'FACTURA_PROFORMA' - DataType = datString - Size = 255 - end item Name = 'PERSONA_CONTACTO' DataType = datString @@ -401,6 +388,11 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente item Name = 'ID_TIPO_IVA' DataType = datInteger + end + item + Name = 'REFERENCIA_FACTURA_PROFORMA' + DataType = datString + Size = 255 end> end item @@ -719,11 +711,6 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente DataType = datInteger Value = '' end - item - Name = 'ID_FACTURA_PROFORMA' - DataType = datInteger - Value = '' - end item Name = 'PERSONA_CONTACTO' DataType = datString @@ -769,19 +756,18 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente 'E_FINAL, PORTADA, MEMORIA, OBSERVACIONES, INCIDENCIAS, '#10' INC' + 'IDENCIAS_ACTIVAS, FECHA_ALTA,'#10' USUARIO, IMPORTE_NETO, IMPORT' + 'E_PORTE, DESCUENTO, IMPORTE_DESCUENTO, '#10' BASE_IMPONIBLE, IVA' + - ', IMPORTE_IVA, IMPORTE_TOTAL, ID_FORMA_PAGO, ID_FACTURA_PROFORMA' + - ','#10' PERSONA_CONTACTO, DESCRIPCION_BONIFICACION, IMPORTE_BONIF' + - 'ICACION, FECHA_VIGENCIA,'#10' TIPO_PRESUPUESTO, ID_TIPO_IVA)'#10' V' + - 'ALUES'#10' (:ID, :ID_EMPRESA, :FECHA_PRESUPUESTO, :FECHA_DECISION' + - ', :REFERENCIA,'#10' :REFERENCIA_AUX, :SITUACION, :ID_CLIENTE, :I' + - 'D_DIRECCION, :REFERENCIA_CLIENTE,'#10' :CLIENTE_FINAL, :PORTADA,' + - ' :MEMORIA, :OBSERVACIONES, '#10' :INCIDENCIAS, :INCIDENCIAS_ACTI' + - 'VAS, CURRENT_TIMESTAMP,'#10' :USUARIO, :IMPORTE_NETO, :IMPORTE_P' + - 'ORTE, :DESCUENTO, '#10' :IMPORTE_DESCUENTO, :BASE_IMPONIBLE, :IV' + - 'A, :IMPORTE_IVA, '#10' :IMPORTE_TOTAL, :ID_FORMA_PAGO, :ID_FACTU' + - 'RA_PROFORMA, :PERSONA_CONTACTO,'#10' :DESCRIPCION_BONIFICACION, ' + - ':IMPORTE_BONIFICACION, :FECHA_VIGENCIA, :TIPO_PRESUPUESTO,'#10' ' + - ':ID_TIPO_IVA)'#10 + ', IMPORTE_IVA, IMPORTE_TOTAL, ID_FORMA_PAGO,'#10' PERSONA_CONTAC' + + 'TO, DESCRIPCION_BONIFICACION, IMPORTE_BONIFICACION, FECHA_VIGENC' + + 'IA,'#10' TIPO_PRESUPUESTO, ID_TIPO_IVA)'#10' VALUES'#10' (:ID, :ID_E' + + 'MPRESA, :FECHA_PRESUPUESTO, :FECHA_DECISION, :REFERENCIA,'#10' :' + + 'REFERENCIA_AUX, :SITUACION, :ID_CLIENTE, :ID_DIRECCION, :REFEREN' + + 'CIA_CLIENTE,'#10' :CLIENTE_FINAL, :PORTADA, :MEMORIA, :OBSERVACI' + + 'ONES, '#10' :INCIDENCIAS, :INCIDENCIAS_ACTIVAS, CURRENT_TIMESTAM' + + 'P,'#10' :USUARIO, :IMPORTE_NETO, :IMPORTE_PORTE, :DESCUENTO, '#10' ' + + ' :IMPORTE_DESCUENTO, :BASE_IMPONIBLE, :IVA, :IMPORTE_IVA, '#10' ' + + ' :IMPORTE_TOTAL, :ID_FORMA_PAGO, :PERSONA_CONTACTO,'#10' :DESCR' + + 'IPCION_BONIFICACION, :IMPORTE_BONIFICACION, :FECHA_VIGENCIA, :TI' + + 'PO_PRESUPUESTO,'#10' :ID_TIPO_IVA)'#10 StatementType = stSQL ColumnMappings = <> end> @@ -945,11 +931,6 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente DataType = datInteger Value = '' end - item - Name = 'ID_FACTURA_PROFORMA' - DataType = datInteger - Value = '' - end item Name = 'PERSONA_CONTACTO' DataType = datString @@ -1008,12 +989,11 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente 'TO = :IMPORTE_DESCUENTO, '#10' BASE_IMPONIBLE = :BASE_IMPONIBLE, ' + #10' IVA = :IVA, '#10' IMPORTE_IVA = :IMPORTE_IVA, '#10' IMPORTE_T' + 'OTAL = :IMPORTE_TOTAL, '#10' ID_FORMA_PAGO = :ID_FORMA_PAGO,'#10' ' + - 'ID_FACTURA_PROFORMA = :ID_FACTURA_PROFORMA,'#10' PERSONA_CONTACTO' + - ' = :PERSONA_CONTACTO,'#10' DESCRIPCION_BONIFICACION = :DESCRIPCIO' + - 'N_BONIFICACION,'#10' IMPORTE_BONIFICACION = :IMPORTE_BONIFICACION' + - ','#10' FECHA_VIGENCIA = :FECHA_VIGENCIA,'#10' TIPO_PRESUPUESTO = :' + - 'TIPO_PRESUPUESTO,'#10' ID_TIPO_IVA = :ID_TIPO_IVA'#10' WHERE'#10' (ID' + - ' = :OLD_ID)'#10 + 'PERSONA_CONTACTO = :PERSONA_CONTACTO,'#10' DESCRIPCION_BONIFICACI' + + 'ON = :DESCRIPCION_BONIFICACION,'#10' IMPORTE_BONIFICACION = :IMPO' + + 'RTE_BONIFICACION,'#10' FECHA_VIGENCIA = :FECHA_VIGENCIA,'#10' TIPO' + + '_PRESUPUESTO = :TIPO_PRESUPUESTO,'#10' ID_TIPO_IVA = :ID_TIPO_IVA' + + #10' WHERE'#10' (ID = :OLD_ID)'#10 StatementType = stSQL ColumnMappings = <> end> diff --git a/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.dfm b/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.dfm index 9d43566..5e9679f 100644 --- a/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.dfm +++ b/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.dfm @@ -167,7 +167,7 @@ inherited fEditorPresupuestosCliente: TfEditorPresupuestosCliente DockPos = 343 Visible = True ExplicitLeft = 427 - ExplicitWidth = 373 + ExplicitWidth = 378 object TBXItem43: TTBXItem Action = actAceptar DisplayMode = nbdmImageAndText @@ -220,9 +220,7 @@ inherited fEditorPresupuestosCliente: TfEditorPresupuestosCliente object actGenerarFacturaProforma: TAction Category = 'Acciones' Caption = 'Generar factura proforma' - Enabled = False ImageIndex = 24 - Visible = False OnExecute = actGenerarFacturaProformaExecute OnUpdate = actGenerarFacturaProformaUpdate end diff --git a/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.pas b/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.pas index 2b4501c..05ffdb5 100644 --- a/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.pas +++ b/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.pas @@ -344,7 +344,7 @@ begin inherited; (Sender as TAction).Enabled := HayDatos and not (ViewGrid.NumSeleccionados > 1) - and (FPresupuestos.FACTURA_PROFORMA = '') + and (FPresupuestos.REFERENCIA_FACTURA_PROFORMA = '') and ViewGrid.esSeleccionCeldaDatos and (FPresupuestos.SITUACION = SITUACION_PRESUPUESTO_ACEPTADO); end; diff --git a/Source/Modulos/Presupuestos de cliente/Views/uViewDatosYSeleccionClientePresupuesto.dfm b/Source/Modulos/Presupuestos de cliente/Views/uViewDatosYSeleccionClientePresupuesto.dfm index b72988c..611a443 100644 --- a/Source/Modulos/Presupuestos de cliente/Views/uViewDatosYSeleccionClientePresupuesto.dfm +++ b/Source/Modulos/Presupuestos de cliente/Views/uViewDatosYSeleccionClientePresupuesto.dfm @@ -17,8 +17,6 @@ inherited frViewDatosYSeleccionClientePresupuesto: TfrViewDatosYSeleccionCliente TabOrder = 0 TabStop = False AutoContentSizes = [acsWidth, acsHeight] - ExplicitWidth = 505 - ExplicitHeight = 165 DesignSize = ( 638 310) diff --git a/Source/Modulos/Presupuestos de cliente/Views/uViewDatosYSeleccionClientePresupuesto.pas b/Source/Modulos/Presupuestos de cliente/Views/uViewDatosYSeleccionClientePresupuesto.pas index 5c49de9..1512f97 100644 --- a/Source/Modulos/Presupuestos de cliente/Views/uViewDatosYSeleccionClientePresupuesto.pas +++ b/Source/Modulos/Presupuestos de cliente/Views/uViewDatosYSeleccionClientePresupuesto.pas @@ -290,9 +290,9 @@ begin if Assigned(FDireccion) then begin - ACadena := Format('%s %s %s %s', + ACadena := Format('%s %s %s %s %s', [FDireccion.CALLE, FDireccion.POBLACION, - FDireccion.CODIGO_POSTAL, FDireccion.PROVINCIA]); + FDireccion.CODIGO_POSTAL, FDireccion.PROVINCIA, FDireccion.PAIS]); if (not FDireccion.TELEFONOIsNull) and (FDireccion.TELEFONO <> '') then ACadena := ACadena + #13#10 + 'Teléfono: ' + FDireccion.TELEFONO; diff --git a/Source/Modulos/Presupuestos de cliente/Views/uViewPresupuestosCliente.dfm b/Source/Modulos/Presupuestos de cliente/Views/uViewPresupuestosCliente.dfm index 507b56a..c501fc3 100644 --- a/Source/Modulos/Presupuestos de cliente/Views/uViewPresupuestosCliente.dfm +++ b/Source/Modulos/Presupuestos de cliente/Views/uViewPresupuestosCliente.dfm @@ -135,10 +135,8 @@ inherited frViewPresupuestosCliente: TfrViewPresupuestosCliente end object cxGridViewFACTURA_PROFORMA: TcxGridDBColumn Caption = 'Ref. factura proforma' - DataBinding.FieldName = 'FACTURA_PROFORMA' - Visible = False + DataBinding.FieldName = 'REFERENCIA_FACTURA_PROFORMA' BestFitMaxWidth = 25 - VisibleForCustomization = False Width = 25 end end @@ -203,6 +201,8 @@ inherited frViewPresupuestosCliente: TfrViewPresupuestosCliente StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitLeft = 757 + ExplicitWidth = 215 + Width = 215 end inherited dxLayoutControl1Group_Root: TdxLayoutGroup inherited dxLayoutControl1Group1: TdxLayoutGroup diff --git a/Source/Modulos/ProcesoPresupuestoCliente/Controller/ProcesoPresupuestosCliente_controller.dproj b/Source/Modulos/ProcesoPresupuestoCliente/Controller/ProcesoPresupuestosCliente_controller.dproj index bdfc45f..0bd5292 100644 --- a/Source/Modulos/ProcesoPresupuestoCliente/Controller/ProcesoPresupuestosCliente_controller.dproj +++ b/Source/Modulos/ProcesoPresupuestoCliente/Controller/ProcesoPresupuestosCliente_controller.dproj @@ -49,29 +49,29 @@ MainSource - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +