From 34297092ec21272a65018d41adb8a1ca3759ea90 Mon Sep 17 00:00:00 2001 From: roberto Date: Thu, 6 Feb 2014 18:44:21 +0000 Subject: [PATCH] Presupuestos primer repaso git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES2/trunk@213 b2cfbe5a-eba1-4a0c-8b32-7feea0a119f2 --- Build/Build.fbpInf | 4 +- Build/Build.fbz6 | Bin 66128 -> 66023 bytes Database/scripts/factuges.sql | 51 +- Source/Base/Base.dproj | 106 +- Source/Cliente/uBootStrap.pas | 2 +- Source/Informes/5/InfPresupuestoCliente.fr3 | 60 ++ Source/Informes/6/InfPresupuestoCliente.fr3 | 60 ++ .../Contactos_controller.identcache | Bin 3476 -> 3476 bytes .../Views/uEditorFacturaCliente.dfm | 52 +- .../Views/uEditorFacturaCliente.pas | 1 - .../Data/uDataModulePedidosCliente.dfm | 9 + .../Model/schPedidosClienteClient_Intf.pas | 98 +- .../Model/schPedidosClienteServer_Intf.pas | 114 ++- .../Servidor/srvPedidosCliente_Impl.dfm | 49 +- .../Views/uEditorPedidoCliente.dfm | 26 +- .../Views/uEditorPedidoCliente.pas | 5 +- .../uViewDatosYSeleccionClientePedido.pas | 1 - .../Views/uViewDetallesPedidoCliente.dfm | 15 +- .../Views/uViewPedidosCliente.dfm | 4 + .../Views/uViewPedidosCliente.pas | 1 + .../PresupuestosCliente_controller.dpk | Bin 1695 -> 1943 bytes .../PresupuestosCliente_controller.dproj | 26 +- .../uDetallesPresupuestoClienteController.pas | 33 +- .../uPresupuestosClienteController.pas | 4 +- .../uPresupuestosClienteReportController.pas | 2 +- .../uTiposPresupuestoController.pas | 222 +++++ .../Data/uDataModulePresupuestosCliente.dfm | 50 +- .../Data/uDataModulePresupuestosCliente.pas | 26 +- .../Data/uIDataModulePresupuestosCliente.pas | 3 +- .../Model/PresupuestosCliente_model.dpk | 12 +- .../Model/PresupuestosCliente_model.dproj | 18 +- .../schPresupuestosClienteClient_Intf.pas | 319 +++++- .../schPresupuestosClienteServer_Intf.pas | 359 +++++-- .../Model/uBizPresupuestosCliente.pas | 56 +- .../Model/uBizTiposPresupuesto.pas | 37 + .../PresupuestosCliente_Group.groupproj | 64 +- .../uRptPresupuestosCliente_Server.dfm | 911 +++++------------- .../uRptPresupuestosCliente_Server.pas | 38 +- .../Servidor/srvPresupuestosCliente_Impl.dfm | 244 ++++- .../Views/PresupuestosCliente_view.dpk | 7 +- .../Views/PresupuestosCliente_view.dproj | 57 +- .../Views/PresupuestosCliente_view.res | Bin 384 -> 4748 bytes ...ditorElegirArticulosPresupuestoCliente.dfm | 11 +- ...ditorElegirArticulosPresupuestoCliente.pas | 2 +- .../Views/uEditorPresupuestoCliente.dfm | 646 ++++--------- .../Views/uEditorPresupuestoCliente.pas | 70 +- .../Views/uEditorPresupuestosCliente.dfm | 27 +- .../Views/uEditorPresupuestosCliente.pas | 61 +- .../uEditorPresupuestosClienteReport.dfm | 3 +- .../uEditorPresupuestosClienteReport.pas | 8 +- ...uViewDatosYSeleccionClientePresupuesto.dfm | 128 ++- ...uViewDatosYSeleccionClientePresupuesto.pas | 37 +- .../Views/uViewDetallesPresupuestoCliente.dfm | 113 ++- .../Views/uViewDetallesPresupuestoCliente.pas | 1 + ...ViewElegirArticulosPresupuestosCliente.dfm | 72 ++ ...ViewElegirArticulosPresupuestosCliente.pas | 2 +- .../Views/uViewPresupuestoCliente.dfm | 170 +++- .../Views/uViewPresupuestoCliente.pas | 59 +- .../Views/uViewPresupuestosCliente.dfm | 28 +- .../Views/uViewPresupuestosCliente.pas | 14 +- .../uGenerarFacturasCliAlbCliUtils.pas | 3 +- .../PedProv_FacProv_relation.bdsproj | 530 ---------- .../PedProv_FacProv_relation.dpk | 48 - .../PedProv_FacProv_relation.dproj | 219 ----- .../PedProv_FacProv_relation.rc | 0 .../PedProv_FacProv_relation.res | Bin 5056 -> 0 bytes .../uGenerarFacturasProvPedProvUtils.dfm | 315 ------ .../uGenerarFacturasProvPedProvUtils.pas | 234 ----- .../uGenerarFacturasProvUtils.dfm | 315 ------ .../uGenerarFacturasProvUtils.pas | 234 ----- .../PreCli_FacPro_relation.dpk} | 8 +- .../PreCli_FacPro_relation.dproj} | 209 +--- .../PreCli_FacPro_relation.identcache | Bin 0 -> 131 bytes .../PreCli_FacPro_relation.rc} | 0 .../PreCli_FacPro_relation.res} | Bin .../uGenerarFacturasProPreCliUtils.dfm} | 2 +- .../uGenerarFacturasProPreCliUtils.pas} | 184 +--- .../PreCli_PedCli_relation.dpk} | 8 +- .../PreCli_PedCli_relation.dproj} | 19 +- .../PreCli_PedCli_relation.identcache | Bin 0 -> 125 bytes .../PreCli_PedCli_relation.rc} | 0 .../PreCli_PedCli_relation.res} | Bin .../uGenerarPedidosCliUtils.dfm} | 4 +- .../uGenerarPedidosCliUtils.pas} | 204 ++-- Source/Servidor/FactuGES_Server.RES | Bin 23204 -> 23204 bytes Source/Servidor/FactuGES_Server.dpr | 10 +- Source/Servidor/FactuGES_Server.rc | 2 +- 87 files changed, 3047 insertions(+), 4099 deletions(-) create mode 100644 Source/Informes/5/InfPresupuestoCliente.fr3 create mode 100644 Source/Informes/6/InfPresupuestoCliente.fr3 create mode 100644 Source/Modulos/Presupuestos de cliente/Controller/uTiposPresupuestoController.pas create mode 100644 Source/Modulos/Presupuestos de cliente/Model/uBizTiposPresupuesto.pas delete mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.bdsproj delete mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.dpk delete mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.dproj delete mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.rc delete mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.res delete mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvPedProvUtils.dfm delete mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvPedProvUtils.pas delete mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvUtils.dfm delete mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvUtils.pas rename Source/Modulos/Relaciones/{Presupuestos de cliente - Facturas de cliente/PreCli_FacCli_relation.dpk => Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.dpk} (69%) rename Source/Modulos/Relaciones/{Presupuestos de cliente - Albaranes de cliente/PreCli_AlbCli_relation.dproj => Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.dproj} (82%) create mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.identcache rename Source/Modulos/Relaciones/{Presupuestos de cliente - Albaranes de cliente/PreCli_AlbCli_relation.rc => Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.rc} (100%) rename Source/Modulos/Relaciones/{Presupuestos de cliente - Albaranes de cliente/PreCli_AlbCli_relation.res => Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.res} (100%) rename Source/Modulos/Relaciones/{Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.dfm => Presupuestos de cliente - Facturas proforma/uGenerarFacturasProPreCliUtils.dfm} (98%) rename Source/Modulos/Relaciones/{Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.pas => Presupuestos de cliente - Facturas proforma/uGenerarFacturasProPreCliUtils.pas} (54%) rename Source/Modulos/Relaciones/{Presupuestos de cliente - Albaranes de cliente/PreCli_AlbCli_relation.dpk => Presupuestos de cliente - Pedidos de cliente/PreCli_PedCli_relation.dpk} (72%) rename Source/Modulos/Relaciones/{Presupuestos de cliente - Facturas de cliente/PreCli_FacCli_relation.dproj => Presupuestos de cliente - Pedidos de cliente/PreCli_PedCli_relation.dproj} (94%) create mode 100644 Source/Modulos/Relaciones/Presupuestos de cliente - Pedidos de cliente/PreCli_PedCli_relation.identcache rename Source/Modulos/Relaciones/{Presupuestos de cliente - Facturas de cliente/PreCli_FacCli_relation.rc => Presupuestos de cliente - Pedidos de cliente/PreCli_PedCli_relation.rc} (100%) rename Source/Modulos/Relaciones/{Presupuestos de cliente - Facturas de cliente/PreCli_FacCli_relation.res => Presupuestos de cliente - Pedidos de cliente/PreCli_PedCli_relation.res} (100%) rename Source/Modulos/Relaciones/{Presupuestos de cliente - Albaranes de cliente/uGenerarAlbaranesCliUtils.dfm => Presupuestos de cliente - Pedidos de cliente/uGenerarPedidosCliUtils.dfm} (98%) rename Source/Modulos/Relaciones/{Presupuestos de cliente - Albaranes de cliente/uGenerarAlbaranesCliUtils.pas => Presupuestos de cliente - Pedidos de cliente/uGenerarPedidosCliUtils.pas} (59%) diff --git a/Build/Build.fbpInf b/Build/Build.fbpInf index 9b63b41..f2fd38b 100644 --- a/Build/Build.fbpInf +++ b/Build/Build.fbpInf @@ -14,8 +14,8 @@ - 00:00:01 - 14/01/2014 15:34:24 + 00:04:06 + 06/02/2014 17:13:55 True diff --git a/Build/Build.fbz6 b/Build/Build.fbz6 index 21f48b0f37c50474aeef15c18ad0d2098f3bda29..ee748cf7ce0c42ea4fb224dc074aeb58edf64236 100644 GIT binary patch literal 66023 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 CkvKyD literal 66128 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
    -Ovumqqzgt*3d&RwuG>R0UqcIf&9nC_t97$|Z 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%0ApIQ`2* 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 A6aWAK diff --git a/Database/scripts/factuges.sql b/Database/scripts/factuges.sql index e54686d..fc45e71 100644 --- a/Database/scripts/factuges.sql +++ b/Database/scripts/factuges.sql @@ -232,6 +232,9 @@ SET GENERATOR GEN_PRESUPUESTOS_CLI_DETALLE_ID TO 1; CREATE GENERATOR GEN_PRESUPUESTOS_CLI_ID; SET GENERATOR GEN_PRESUPUESTOS_CLI_ID TO 1; +CREATE GENERATOR GEN_PRESUPUESTOS_TIPOS_ID; +SET GENERATOR GEN_PRESUPUESTOS_TIPOS_ID TO 1; + CREATE GENERATOR GEN_PROVEEDORES_GRUPOS_ID; SET GENERATOR GEN_PROVEEDORES_GRUPOS_ID TO 1; @@ -686,7 +689,8 @@ CREATE TABLE EMPRESAS ( PARAM_MARGEN TIPO_PORCENTAJE, ID_TIPO_IVA SMALLINT, ID_FORMA_PAGO SMALLINT, - ID_ALMACEN SMALLINT + ID_ALMACEN SMALLINT, + VALIDEZ_PRESUPUESTOS SMALLINT ); CREATE TABLE EMPRESAS_CONTACTOS ( @@ -971,7 +975,8 @@ CREATE TABLE PEDIDOS_CLIENTE ( ID_FORMA_PAGO TIPO_ID, REF_TIENDA_WEB INTEGER, FECHA_PREVISTA_ENVIO DATE, - REFERENCIA_CLIENTE VARCHAR(255) + REFERENCIA_CLIENTE VARCHAR(255), + ID_PRESUPUESTO TIPO_ID ); CREATE TABLE PEDIDOS_CLIENTE_DETALLES ( @@ -1072,6 +1077,11 @@ CREATE TABLE POBLACIONES ( DESCRIPCION VARCHAR(255) NOT NULL ); +CREATE TABLE PRESUPUESTOS_TIPOS ( + ID TIPO_ID NOT NULL, + DESCRIPCION VARCHAR(255) +); + CREATE TABLE PRESUPUESTOS_CLIENTE ( ID TIPO_ID NOT NULL, ID_EMPRESA TIPO_ID, @@ -1104,7 +1114,11 @@ CREATE TABLE PRESUPUESTOS_CLIENTE ( PERSONA_CONTACTO VARCHAR(255), ID_DIRECCION TIPO_ID, DESCRIPCION_BONIFICACION VARCHAR(255) COLLATE ES_ES, - IMPORTE_BONIFICACION TIPO_IMPORTE + IMPORTE_BONIFICACION TIPO_IMPORTE, + FECHA_VIGENCIA DATE, + TIPO_PRESUPUESTO VARCHAR(255) COLLATE ES_ES, + ID_PEDIDO TIPO_ID, + ID_TIPO_IVA TIPO_ID ); CREATE TABLE PRESUPUESTOS_CLIENTE_DETALLES ( @@ -3662,7 +3676,11 @@ CREATE VIEW V_PRESUPUESTOS_CLIENTE( FACTURA, PERSONA_CONTACTO, DESCRIPCION_BONIFICACION, - IMPORTE_BONIFICACION) + IMPORTE_BONIFICACION, + FECHA_VIGENCIA, + TIPO_PRESUPUESTO, + ID_PEDIDO, + REFERENCIA_PEDIDO) AS SELECT PRESUPUESTOS_CLIENTE.ID, @@ -3696,14 +3714,20 @@ SELECT PRESUPUESTOS_CLIENTE.IMPORTE_TOTAL, PRESUPUESTOS_CLIENTE.ID_FORMA_PAGO, PRESUPUESTOS_CLIENTE.ID_FACTURA, - FACTURAS_CLIENTE.REFERENCIA, +/* FACTURAS_CLIENTE.REFERENCIA,*/ + NULL as REFERENCIA_FACTURA, PRESUPUESTOS_CLIENTE.PERSONA_CONTACTO, PRESUPUESTOS_CLIENTE.DESCRIPCION_BONIFICACION, - PRESUPUESTOS_CLIENTE.IMPORTE_BONIFICACION + PRESUPUESTOS_CLIENTE.IMPORTE_BONIFICACION, + PRESUPUESTOS_CLIENTE.FECHA_VIGENCIA, + PRESUPUESTOS_CLIENTE.TIPO_PRESUPUESTO, + PRESUPUESTOS_CLIENTE.ID_PEDIDO, + PEDIDOS_CLIENTE.REFERENCIA + FROM PRESUPUESTOS_CLIENTE INNER JOIN CONTACTOS ON (CONTACTOS.ID = PRESUPUESTOS_CLIENTE.ID_CLIENTE) - LEFT OUTER JOIN FACTURAS_CLIENTE ON (FACTURAS_CLIENTE.ID = PRESUPUESTOS_CLIENTE.ID_FACTURA) + LEFT OUTER JOIN PEDIDOS_CLIENTE ON (PEDIDOS_CLIENTE.ID = PRESUPUESTOS_CLIENTE.ID_PEDIDO) ; /* View: V_PROVEEDORES */ @@ -4409,7 +4433,9 @@ CREATE VIEW V_PEDIDOS_CLIENTE( REF_TIENDA_WEB, FECHA_PREVISTA_ENVIO, NUM_COPIAS, - NUM_CORREOS) + NUM_CORREOS, + ID_PRESUPUESTO, + REFERENCIA_PRESUPUESTO) AS SELECT PEDIDOS_CLIENTE.ID, @@ -4449,10 +4475,13 @@ SELECT PEDIDOS_CLIENTE.REF_TIENDA_WEB, PEDIDOS_CLIENTE.FECHA_PREVISTA_ENVIO, IMPRESIONES.NUM_COPIAS, - REGISTRO_CORREOS.NUM_CORREOS + REGISTRO_CORREOS.NUM_CORREOS, + PEDIDOS_CLIENTE.ID_PRESUPUESTO, + PRESUPUESTOS_CLIENTE.REFERENCIA FROM PEDIDOS_CLIENTE LEFT JOIN V_PED_CLI_SITUACION_X_ALBARANES ON (V_PED_CLI_SITUACION_X_ALBARANES.ID_PEDIDO = PEDIDOS_CLIENTE.ID) + LEFT JOIN PRESUPUESTOS_CLIENTE ON (PRESUPUESTOS_CLIENTE.id = PEDIDOS_CLIENTE.ID_PRESUPUESTO) /* INNER JOIN PEDIDOS_CLIENTE ON (PEDIDOS_CLIENTE.ID = V_PED_CLI_SITUACION.ID_PEDIDO)*/ INNER JOIN CONTACTOS ON (PEDIDOS_CLIENTE.ID_CLIENTE = CONTACTOS.ID) LEFT JOIN IMPRESIONES @@ -5109,6 +5138,7 @@ ALTER TABLE PEDIDOS_PROVEEDOR_DETALLES ADD CONSTRAINT PK_PEDIDOS_PROVEEDOR_DETAL ALTER TABLE PERMISOS ADD CONSTRAINT PK_PERMISOS PRIMARY KEY (ID); ALTER TABLE PERMISOSEX ADD CONSTRAINT PK_PERMISOSEX PRIMARY KEY (ID); ALTER TABLE POBLACIONES ADD CONSTRAINT PK_POBLACIONES PRIMARY KEY (ID); +ALTER TABLE PRESUPUESTOS_TIPOS ADD CONSTRAINT PK_PRESUPUESTOS_TIPOS PRIMARY KEY (ID); ALTER TABLE PRESUPUESTOS_CLIENTE ADD CONSTRAINT PK_PRESUPUESTOS_CLIENTE PRIMARY KEY (ID); ALTER TABLE PRESUPUESTOS_CLIENTE_DETALLES ADD CONSTRAINT PK_PRESUPUESTOS_CLIENTE_DETALLE PRIMARY KEY (ID); ALTER TABLE PROVEEDORES_DATOS ADD CONSTRAINT PK_PROVEEDORES_DATOS PRIMARY KEY (ID_PROVEEDOR); @@ -5156,12 +5186,13 @@ ALTER TABLE PAGOS_CLIENTE ADD CONSTRAINT FK_PAGOS_CLIENTE FOREIGN KEY (ID_RECIBO ALTER TABLE PAGOS_PROVEEDOR ADD CONSTRAINT FK_PAGOS_PROVEEDOR FOREIGN KEY (ID_RECIBO) REFERENCES RECIBOS_PROVEEDOR (ID); ALTER TABLE PEDIDOS_CLIENTE ADD CONSTRAINT FK_PEDIDOS_CLIENTE FOREIGN KEY (ID_CLIENTE) REFERENCES CONTACTOS (ID); ALTER TABLE PEDIDOS_CLIENTE ADD CONSTRAINT FK_PEDIDOS_CLIENTE_ID_EMPRESA FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID); +alter table PEDIDOS_CLIENTE add constraint FK_PEDIDOS_CLIENTE_1 foreign key (ID_PRESUPUESTO) references PRESUPUESTOS_CLIENTE(ID); ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID); ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR2 FOREIGN KEY (ID_PROVEEDOR) REFERENCES CONTACTOS (ID); ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR_1 FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_PROVEEDOR (ID) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE PRESUPUESTOS_CLIENTE ADD CONSTRAINT FK_PRESUPUESTOS_CLIENTE_1 FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID); ALTER TABLE PRESUPUESTOS_CLIENTE ADD CONSTRAINT FK_PRESUPUESTOS_CLIENTE_2 FOREIGN KEY (ID_CLIENTE) REFERENCES CONTACTOS (ID); -ALTER TABLE PRESUPUESTOS_CLIENTE ADD CONSTRAINT FK_PRESUPUESTOS_CLIENTE_3 FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_CLIENTE (ID) ON DELETE SET NULL ON UPDATE SET NULL; +alter table PRESUPUESTOS_CLIENTE add constraint FK_PRESUPUESTOS_CLIENTE_3 foreign key (ID_FACTURA_PROFORMA) references FACTURAS_PROFORMA(ID); ALTER TABLE RECIBOS_CLIENTE ADD CONSTRAINT FK_RECIBOS_CLIENTE FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_CLIENTE (ID) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE RECIBOS_CLIENTE ADD CONSTRAINT FK_RECIBOS_CLIENTE2 FOREIGN KEY (ID_REMESA) REFERENCES REMESAS_CLIENTE (ID) ON DELETE SET NULL ON UPDATE SET NULL; ALTER TABLE RECIBOS_PROVEEDOR ADD CONSTRAINT FK_RECIBOS_PROVEEDOR FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_PROVEEDOR (ID) ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj index b868ce6..1035ed3 100644 --- a/Source/Base/Base.dproj +++ b/Source/Base/Base.dproj @@ -45,6 +45,8 @@ 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 @@ -58,63 +60,63 @@
    DataModuleImpresiones
    TDataModule + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    DataModuleRegistroCorreos
    TDataModule
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    fConfigurarConexion
    TForm diff --git a/Source/Cliente/uBootStrap.pas b/Source/Cliente/uBootStrap.pas index 6ff6c6a..b763b06 100644 --- a/Source/Cliente/uBootStrap.pas +++ b/Source/Cliente/uBootStrap.pas @@ -33,7 +33,7 @@ begin // LoadModule('Obras_plugin.bpl'); LoadModule('Articulos_plugin.bpl'); -// LoadModule(MODULENAME_PRESUPUESTOS_CLIENTE); + LoadModule(MODULENAME_PRESUPUESTOS_CLIENTE); LoadModule(MODULENAME_PEDIDOS_CLIENTE); LoadModule(MODULENAME_ALBARANES_CLIENTE); diff --git a/Source/Informes/5/InfPresupuestoCliente.fr3 b/Source/Informes/5/InfPresupuestoCliente.fr3 new file mode 100644 index 0000000..651ba35 --- /dev/null +++ b/Source/Informes/5/InfPresupuestoCliente.fr3 @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Informes/6/InfPresupuestoCliente.fr3 b/Source/Informes/6/InfPresupuestoCliente.fr3 new file mode 100644 index 0000000..651ba35 --- /dev/null +++ b/Source/Informes/6/InfPresupuestoCliente.fr3 @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Modulos/Contactos/Controller/Contactos_controller.identcache b/Source/Modulos/Contactos/Controller/Contactos_controller.identcache index 8ff2c49217652e61e9f7900a71545ffe1de84dfe..ebe70e8c6c558c27e62af574fb5841c015ca0550 100644 GIT binary patch delta 49 zcmV-10M7rE8APPK_T?81jy9pEllOzQ%lTZW= IvtA1}0;`b^8vp Params = <> StreamingOptions = [soDisableEventsWhileStreaming] diff --git a/Source/Modulos/Pedidos de cliente/Model/schPedidosClienteClient_Intf.pas b/Source/Modulos/Pedidos de cliente/Model/schPedidosClienteClient_Intf.pas index b7efff0..473b77f 100644 --- a/Source/Modulos/Pedidos de cliente/Model/schPedidosClienteClient_Intf.pas +++ b/Source/Modulos/Pedidos de cliente/Model/schPedidosClienteClient_Intf.pas @@ -9,13 +9,13 @@ 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_ListaAnosPedidos = '{52367490-087A-469F-B93B-4AFF89D7D4FE}'; - RID_PedidosProveedor = '{ED584C2A-011D-4C96-96D4-4C1CA33A11BD}'; - RID_PedidosCliente = '{CD51EA1E-706D-47A9-9750-B21DC98C84BC}'; - RID_PedidosCliente_Detalles = '{0E41F534-D8F7-4323-9ECA-3D2FE77C83B1}'; - RID_PedidosCliente_Articulos_Pendientes = '{4B037FD2-288E-47FB-853E-7E9F75BE9705}'; - RID_PedidoCliente_ArticulosPendientesPedirAProv = '{C541B99A-F566-48B3-8C27-4AF629628F68}'; - RID_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos = '{832C1605-743A-4685-B3CF-17C5D2CD1902}'; + RID_ListaAnosPedidos = '{B03310DC-4A84-4779-BF7B-33FF0F741912}'; + RID_PedidosProveedor = '{95F27FC7-2016-4B25-A964-29A647BEB277}'; + RID_PedidosCliente = '{11401A1B-9CA5-4528-BD63-FCA01EA10603}'; + RID_PedidosCliente_Detalles = '{69AF4753-C444-4247-AAD5-59E95435B041}'; + RID_PedidosCliente_Articulos_Pendientes = '{5A42E580-E6B3-4B44-83B7-FDFDCD5C1980}'; + RID_PedidoCliente_ArticulosPendientesPedirAProv = '{23A4639E-E866-4BAB-969A-DC5AE706B5CB}'; + RID_PedidoCliente_ArticulosPendientesPedirAProvNoArticulos = '{35396E3E-190B-4197-9979-7753ED63C5B7}'; { Data table names } nme_ListaAnosPedidos = 'ListaAnosPedidos'; @@ -79,6 +79,8 @@ const fld_PedidosClienteFECHA_PREVISTA_ENVIO = 'FECHA_PREVISTA_ENVIO'; fld_PedidosClienteNUM_COPIAS = 'NUM_COPIAS'; fld_PedidosClienteNUM_CORREOS = 'NUM_CORREOS'; + fld_PedidosClienteID_PRESUPUESTO = 'ID_PRESUPUESTO'; + fld_PedidosClienteREFERENCIA_PRESUPUESTO = 'REFERENCIA_PRESUPUESTO'; { PedidosCliente field indexes } idx_PedidosClienteID = 0; @@ -115,6 +117,8 @@ const idx_PedidosClienteFECHA_PREVISTA_ENVIO = 31; idx_PedidosClienteNUM_COPIAS = 32; idx_PedidosClienteNUM_CORREOS = 33; + idx_PedidosClienteID_PRESUPUESTO = 34; + idx_PedidosClienteREFERENCIA_PRESUPUESTO = 35; { PedidosCliente_Detalles fields } fld_PedidosCliente_DetallesID = 'ID'; @@ -211,7 +215,7 @@ const type { IListaAnosPedidos } IListaAnosPedidos = interface(IDAStronglyTypedDataTable) - ['{C9EAE65F-5971-4B08-ABC0-274B4FD22461}'] + ['{B3BAA253-80EF-4183-8FD5-6CA4B0593DAE}'] { Property getters and setters } function GetANOValue: String; procedure SetANOValue(const aValue: String); @@ -246,7 +250,7 @@ type { IPedidosProveedor } IPedidosProveedor = interface(IDAStronglyTypedDataTable) - ['{772F1791-6705-4292-A9CF-9CAFDA0FCB3B}'] + ['{A4FF4E03-9C95-4B87-AFCF-B3A8F53EC5CC}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -317,7 +321,7 @@ type { IPedidosCliente } IPedidosCliente = interface(IDAStronglyTypedDataTable) - ['{319F8BCF-0CA3-4185-896C-DD22DF9847FD}'] + ['{1B16009A-2B49-46C3-955E-6FD4F533D570}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -453,6 +457,14 @@ type procedure SetNUM_CORREOSValue(const aValue: SmallInt); function GetNUM_CORREOSIsNull: Boolean; procedure SetNUM_CORREOSIsNull(const aValue: Boolean); + function GetID_PRESUPUESTOValue: Integer; + procedure SetID_PRESUPUESTOValue(const aValue: Integer); + function GetID_PRESUPUESTOIsNull: Boolean; + procedure SetID_PRESUPUESTOIsNull(const aValue: Boolean); + function GetREFERENCIA_PRESUPUESTOValue: String; + procedure SetREFERENCIA_PRESUPUESTOValue(const aValue: String); + function GetREFERENCIA_PRESUPUESTOIsNull: Boolean; + procedure SetREFERENCIA_PRESUPUESTOIsNull(const aValue: Boolean); { Properties } @@ -524,6 +536,10 @@ type property NUM_COPIASIsNull: Boolean read GetNUM_COPIASIsNull write SetNUM_COPIASIsNull; property NUM_CORREOS: SmallInt read GetNUM_CORREOSValue write SetNUM_CORREOSValue; property NUM_CORREOSIsNull: Boolean read GetNUM_CORREOSIsNull write SetNUM_CORREOSIsNull; + property ID_PRESUPUESTO: Integer read GetID_PRESUPUESTOValue write SetID_PRESUPUESTOValue; + property ID_PRESUPUESTOIsNull: Boolean read GetID_PRESUPUESTOIsNull write SetID_PRESUPUESTOIsNull; + property REFERENCIA_PRESUPUESTO: String read GetREFERENCIA_PRESUPUESTOValue write SetREFERENCIA_PRESUPUESTOValue; + property REFERENCIA_PRESUPUESTOIsNull: Boolean read GetREFERENCIA_PRESUPUESTOIsNull write SetREFERENCIA_PRESUPUESTOIsNull; end; { TPedidosClienteDataTableRules } @@ -669,6 +685,14 @@ type procedure SetNUM_CORREOSValue(const aValue: SmallInt); virtual; function GetNUM_CORREOSIsNull: Boolean; virtual; procedure SetNUM_CORREOSIsNull(const aValue: Boolean); virtual; + function GetID_PRESUPUESTOValue: Integer; virtual; + procedure SetID_PRESUPUESTOValue(const aValue: Integer); virtual; + function GetID_PRESUPUESTOIsNull: Boolean; virtual; + procedure SetID_PRESUPUESTOIsNull(const aValue: Boolean); virtual; + function GetREFERENCIA_PRESUPUESTOValue: String; virtual; + procedure SetREFERENCIA_PRESUPUESTOValue(const aValue: String); virtual; + function GetREFERENCIA_PRESUPUESTOIsNull: Boolean; virtual; + procedure SetREFERENCIA_PRESUPUESTOIsNull(const aValue: Boolean); virtual; { Properties } property ID: Integer read GetIDValue write SetIDValue; @@ -739,6 +763,10 @@ type property NUM_COPIASIsNull: Boolean read GetNUM_COPIASIsNull write SetNUM_COPIASIsNull; property NUM_CORREOS: SmallInt read GetNUM_CORREOSValue write SetNUM_CORREOSValue; property NUM_CORREOSIsNull: Boolean read GetNUM_CORREOSIsNull write SetNUM_CORREOSIsNull; + property ID_PRESUPUESTO: Integer read GetID_PRESUPUESTOValue write SetID_PRESUPUESTOValue; + property ID_PRESUPUESTOIsNull: Boolean read GetID_PRESUPUESTOIsNull write SetID_PRESUPUESTOIsNull; + property REFERENCIA_PRESUPUESTO: String read GetREFERENCIA_PRESUPUESTOValue write SetREFERENCIA_PRESUPUESTOValue; + property REFERENCIA_PRESUPUESTOIsNull: Boolean read GetREFERENCIA_PRESUPUESTOIsNull write SetREFERENCIA_PRESUPUESTOIsNull; public constructor Create(aDataTable: TDADataTable); override; @@ -748,7 +776,7 @@ type { IPedidosCliente_Detalles } IPedidosCliente_Detalles = interface(IDAStronglyTypedDataTable) - ['{69F92C81-F6E3-4D2C-B8CB-B90ADEC9A021}'] + ['{040BF8A0-FB19-40A1-B02F-37914032D78C}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -939,7 +967,7 @@ type { IPedidosCliente_Articulos_Pendientes } IPedidosCliente_Articulos_Pendientes = interface(IDAStronglyTypedDataTable) - ['{5EEFF610-2808-4B2C-8C67-842BF7362503}'] + ['{23014D12-09EB-408F-9986-D7E3297DE88B}'] { Property getters and setters } function GetID_ARTICULOValue: Integer; procedure SetID_ARTICULOValue(const aValue: Integer); @@ -1010,7 +1038,7 @@ type { IPedidoCliente_ArticulosPendientesPedirAProv } IPedidoCliente_ArticulosPendientesPedirAProv = interface(IDAStronglyTypedDataTable) - ['{7204B7EC-2122-4B60-8D15-24E8F26FD247}'] + ['{8CBCEE12-469C-4C52-B76B-9BDE025988D8}'] { Property getters and setters } function GetID_PEDIDOValue: Integer; procedure SetID_PEDIDOValue(const aValue: Integer); @@ -1153,7 +1181,7 @@ type { IPedidoCliente_ArticulosPendientesPedirAProvNoArticulos } IPedidoCliente_ArticulosPendientesPedirAProvNoArticulos = interface(IDAStronglyTypedDataTable) - ['{C4465D1A-71FC-4F76-BC11-59F1FBCA620D}'] + ['{2A72E2BD-CAF4-4187-A671-8BA3E9F36C27}'] { Property getters and setters } function GetID_PEDIDOValue: Integer; procedure SetID_PEDIDOValue(const aValue: Integer); @@ -2164,6 +2192,48 @@ begin DataTable.Fields[idx_PedidosClienteNUM_CORREOS].AsVariant := Null; end; +function TPedidosClienteDataTableRules.GetID_PRESUPUESTOValue: Integer; +begin + result := DataTable.Fields[idx_PedidosClienteID_PRESUPUESTO].AsInteger; +end; + +procedure TPedidosClienteDataTableRules.SetID_PRESUPUESTOValue(const aValue: Integer); +begin + DataTable.Fields[idx_PedidosClienteID_PRESUPUESTO].AsInteger := aValue; +end; + +function TPedidosClienteDataTableRules.GetID_PRESUPUESTOIsNull: boolean; +begin + result := DataTable.Fields[idx_PedidosClienteID_PRESUPUESTO].IsNull; +end; + +procedure TPedidosClienteDataTableRules.SetID_PRESUPUESTOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PedidosClienteID_PRESUPUESTO].AsVariant := Null; +end; + +function TPedidosClienteDataTableRules.GetREFERENCIA_PRESUPUESTOValue: String; +begin + result := DataTable.Fields[idx_PedidosClienteREFERENCIA_PRESUPUESTO].AsString; +end; + +procedure TPedidosClienteDataTableRules.SetREFERENCIA_PRESUPUESTOValue(const aValue: String); +begin + DataTable.Fields[idx_PedidosClienteREFERENCIA_PRESUPUESTO].AsString := aValue; +end; + +function TPedidosClienteDataTableRules.GetREFERENCIA_PRESUPUESTOIsNull: boolean; +begin + result := DataTable.Fields[idx_PedidosClienteREFERENCIA_PRESUPUESTO].IsNull; +end; + +procedure TPedidosClienteDataTableRules.SetREFERENCIA_PRESUPUESTOIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_PedidosClienteREFERENCIA_PRESUPUESTO].AsVariant := Null; +end; + { TPedidosCliente_DetallesDataTableRules } constructor TPedidosCliente_DetallesDataTableRules.Create(aDataTable: TDADataTable); diff --git a/Source/Modulos/Pedidos de cliente/Model/schPedidosClienteServer_Intf.pas b/Source/Modulos/Pedidos de cliente/Model/schPedidosClienteServer_Intf.pas index 5dddb5a..14aeaf8 100644 --- a/Source/Modulos/Pedidos de cliente/Model/schPedidosClienteServer_Intf.pas +++ b/Source/Modulos/Pedidos de cliente/Model/schPedidosClienteServer_Intf.pas @@ -9,18 +9,18 @@ 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_ListaAnosPedidosDelta = '{F7087B26-16C3-4E50-AD14-5EF21B59DB5C}'; - RID_PedidosProveedorDelta = '{7D954D17-215A-4D4C-A7FE-6BA75062958F}'; - RID_PedidosClienteDelta = '{9B8545B7-930D-4DF6-B52A-C07AC8BD6EA7}'; - RID_PedidosCliente_DetallesDelta = '{99199B9F-C476-4E54-8385-4D894E1E857F}'; - RID_PedidosCliente_Articulos_PendientesDelta = '{21228D66-8988-46CB-AFD0-E265C9D1F4DB}'; - RID_PedidoCliente_ArticulosPendientesPedirAProvDelta = '{6A988443-1420-48A3-8E88-444796A56BE1}'; - RID_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDelta = '{53B6BA3C-0BC4-40E5-9CB1-04539F4EB028}'; + RID_ListaAnosPedidosDelta = '{5366095E-0D85-41E6-BDE1-4A242E0624D2}'; + RID_PedidosProveedorDelta = '{15E9212C-237F-43DA-93BB-F731DCF39D72}'; + RID_PedidosClienteDelta = '{67B51E78-FF9E-4546-92F0-FF273F32237F}'; + RID_PedidosCliente_DetallesDelta = '{503A2F9C-8B5D-4889-8071-8EF2D1716D29}'; + RID_PedidosCliente_Articulos_PendientesDelta = '{73729328-922F-4458-A20F-ECE1969FD04D}'; + RID_PedidoCliente_ArticulosPendientesPedirAProvDelta = '{E0FA4DF3-2220-4992-9563-754ACEE319D3}'; + RID_PedidoCliente_ArticulosPendientesPedirAProvNoArticulosDelta = '{054BBD78-D3EB-4180-BDA1-19DEC4400A55}'; type { IListaAnosPedidosDelta } IListaAnosPedidosDelta = interface(IListaAnosPedidos) - ['{F7087B26-16C3-4E50-AD14-5EF21B59DB5C}'] + ['{5366095E-0D85-41E6-BDE1-4A242E0624D2}'] { Property getters and setters } function GetOldANOValue : String; @@ -54,7 +54,7 @@ type { IPedidosProveedorDelta } IPedidosProveedorDelta = interface(IPedidosProveedor) - ['{7D954D17-215A-4D4C-A7FE-6BA75062958F}'] + ['{15E9212C-237F-43DA-93BB-F731DCF39D72}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldREFERENCIAValue : String; @@ -124,7 +124,7 @@ type { IPedidosClienteDelta } IPedidosClienteDelta = interface(IPedidosCliente) - ['{9B8545B7-930D-4DF6-B52A-C07AC8BD6EA7}'] + ['{67B51E78-FF9E-4546-92F0-FF273F32237F}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -160,6 +160,8 @@ type function GetOldFECHA_PREVISTA_ENVIOValue : DateTime; function GetOldNUM_COPIASValue : SmallInt; function GetOldNUM_CORREOSValue : SmallInt; + function GetOldID_PRESUPUESTOValue : Integer; + function GetOldREFERENCIA_PRESUPUESTOValue : String; { Properties } property OldID : Integer read GetOldIDValue; @@ -196,6 +198,8 @@ type property OldFECHA_PREVISTA_ENVIO : DateTime read GetOldFECHA_PREVISTA_ENVIOValue; property OldNUM_COPIAS : SmallInt read GetOldNUM_COPIASValue; property OldNUM_CORREOS : SmallInt read GetOldNUM_CORREOSValue; + property OldID_PRESUPUESTO : Integer read GetOldID_PRESUPUESTOValue; + property OldREFERENCIA_PRESUPUESTO : String read GetOldREFERENCIA_PRESUPUESTOValue; end; { TPedidosClienteBusinessProcessorRules } @@ -409,6 +413,18 @@ type function GetOldNUM_CORREOSIsNull: Boolean; virtual; procedure SetNUM_CORREOSValue(const aValue: SmallInt); virtual; procedure SetNUM_CORREOSIsNull(const aValue: Boolean); virtual; + function GetID_PRESUPUESTOValue: Integer; virtual; + function GetID_PRESUPUESTOIsNull: Boolean; virtual; + function GetOldID_PRESUPUESTOValue: Integer; virtual; + function GetOldID_PRESUPUESTOIsNull: Boolean; virtual; + procedure SetID_PRESUPUESTOValue(const aValue: Integer); virtual; + procedure SetID_PRESUPUESTOIsNull(const aValue: Boolean); virtual; + function GetREFERENCIA_PRESUPUESTOValue: String; virtual; + function GetREFERENCIA_PRESUPUESTOIsNull: Boolean; virtual; + function GetOldREFERENCIA_PRESUPUESTOValue: String; virtual; + function GetOldREFERENCIA_PRESUPUESTOIsNull: Boolean; virtual; + procedure SetREFERENCIA_PRESUPUESTOValue(const aValue: String); virtual; + procedure SetREFERENCIA_PRESUPUESTOIsNull(const aValue: Boolean); virtual; { Properties } property ID : Integer read GetIDValue write SetIDValue; @@ -547,6 +563,14 @@ type property NUM_CORREOSIsNull : Boolean read GetNUM_CORREOSIsNull write SetNUM_CORREOSIsNull; property OldNUM_CORREOS : SmallInt read GetOldNUM_CORREOSValue; property OldNUM_CORREOSIsNull : Boolean read GetOldNUM_CORREOSIsNull; + property ID_PRESUPUESTO : Integer read GetID_PRESUPUESTOValue write SetID_PRESUPUESTOValue; + property ID_PRESUPUESTOIsNull : Boolean read GetID_PRESUPUESTOIsNull write SetID_PRESUPUESTOIsNull; + property OldID_PRESUPUESTO : Integer read GetOldID_PRESUPUESTOValue; + property OldID_PRESUPUESTOIsNull : Boolean read GetOldID_PRESUPUESTOIsNull; + property REFERENCIA_PRESUPUESTO : String read GetREFERENCIA_PRESUPUESTOValue write SetREFERENCIA_PRESUPUESTOValue; + property REFERENCIA_PRESUPUESTOIsNull : Boolean read GetREFERENCIA_PRESUPUESTOIsNull write SetREFERENCIA_PRESUPUESTOIsNull; + property OldREFERENCIA_PRESUPUESTO : String read GetOldREFERENCIA_PRESUPUESTOValue; + property OldREFERENCIA_PRESUPUESTOIsNull : Boolean read GetOldREFERENCIA_PRESUPUESTOIsNull; public constructor Create(aBusinessProcessor: TDABusinessProcessor); override; @@ -556,7 +580,7 @@ type { IPedidosCliente_DetallesDelta } IPedidosCliente_DetallesDelta = interface(IPedidosCliente_Detalles) - ['{99199B9F-C476-4E54-8385-4D894E1E857F}'] + ['{503A2F9C-8B5D-4889-8071-8EF2D1716D29}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_PEDIDOValue : Integer; @@ -746,7 +770,7 @@ type { IPedidosCliente_Articulos_PendientesDelta } IPedidosCliente_Articulos_PendientesDelta = interface(IPedidosCliente_Articulos_Pendientes) - ['{21228D66-8988-46CB-AFD0-E265C9D1F4DB}'] + ['{73729328-922F-4458-A20F-ECE1969FD04D}'] { Property getters and setters } function GetOldID_ARTICULOValue : Integer; function GetOldCANTIDAD_PEDValue : Currency; @@ -816,7 +840,7 @@ type { IPedidoCliente_ArticulosPendientesPedirAProvDelta } IPedidoCliente_ArticulosPendientesPedirAProvDelta = interface(IPedidoCliente_ArticulosPendientesPedirAProv) - ['{6A988443-1420-48A3-8E88-444796A56BE1}'] + ['{E0FA4DF3-2220-4992-9563-754ACEE319D3}'] { Property getters and setters } function GetOldID_PEDIDOValue : Integer; function GetOldID_ARTICULOValue : Integer; @@ -958,7 +982,7 @@ type { IPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDelta } IPedidoCliente_ArticulosPendientesPedirAProvNoArticulosDelta = interface(IPedidoCliente_ArticulosPendientesPedirAProvNoArticulos) - ['{53B6BA3C-0BC4-40E5-9CB1-04539F4EB028}'] + ['{054BBD78-D3EB-4180-BDA1-19DEC4400A55}'] { Property getters and setters } function GetOldID_PEDIDOValue : Integer; function GetOldID_ARTICULOValue : Integer; @@ -2361,6 +2385,68 @@ begin BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosClienteNUM_CORREOS] := Null; end; +function TPedidosClienteBusinessProcessorRules.GetID_PRESUPUESTOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosClienteID_PRESUPUESTO]; +end; + +function TPedidosClienteBusinessProcessorRules.GetID_PRESUPUESTOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosClienteID_PRESUPUESTO]); +end; + +function TPedidosClienteBusinessProcessorRules.GetOldID_PRESUPUESTOValue: Integer; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidosClienteID_PRESUPUESTO]; +end; + +function TPedidosClienteBusinessProcessorRules.GetOldID_PRESUPUESTOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidosClienteID_PRESUPUESTO]); +end; + +procedure TPedidosClienteBusinessProcessorRules.SetID_PRESUPUESTOValue(const aValue: Integer); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosClienteID_PRESUPUESTO] := aValue; +end; + +procedure TPedidosClienteBusinessProcessorRules.SetID_PRESUPUESTOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosClienteID_PRESUPUESTO] := Null; +end; + +function TPedidosClienteBusinessProcessorRules.GetREFERENCIA_PRESUPUESTOValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosClienteREFERENCIA_PRESUPUESTO]; +end; + +function TPedidosClienteBusinessProcessorRules.GetREFERENCIA_PRESUPUESTOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosClienteREFERENCIA_PRESUPUESTO]); +end; + +function TPedidosClienteBusinessProcessorRules.GetOldREFERENCIA_PRESUPUESTOValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_PedidosClienteREFERENCIA_PRESUPUESTO]; +end; + +function TPedidosClienteBusinessProcessorRules.GetOldREFERENCIA_PRESUPUESTOIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_PedidosClienteREFERENCIA_PRESUPUESTO]); +end; + +procedure TPedidosClienteBusinessProcessorRules.SetREFERENCIA_PRESUPUESTOValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosClienteREFERENCIA_PRESUPUESTO] := aValue; +end; + +procedure TPedidosClienteBusinessProcessorRules.SetREFERENCIA_PRESUPUESTOIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_PedidosClienteREFERENCIA_PRESUPUESTO] := Null; +end; + { TPedidosCliente_DetallesBusinessProcessorRules } constructor TPedidosCliente_DetallesBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); diff --git a/Source/Modulos/Pedidos de cliente/Servidor/srvPedidosCliente_Impl.dfm b/Source/Modulos/Pedidos de cliente/Servidor/srvPedidosCliente_Impl.dfm index e6a721b..a7f7e43 100644 --- a/Source/Modulos/Pedidos de cliente/Servidor/srvPedidosCliente_Impl.dfm +++ b/Source/Modulos/Pedidos de cliente/Servidor/srvPedidosCliente_Impl.dfm @@ -234,6 +234,14 @@ object srvPedidosCliente: TsrvPedidosCliente item DatasetField = 'ID_DIRECCION' TableField = 'ID_DIRECCION' + end + item + DatasetField = 'ID_PRESUPUESTO' + TableField = 'ID_PRESUPUESTO' + end + item + DatasetField = 'REFERENCIA_PRESUPUESTO' + TableField = 'REFERENCIA_PRESUPUESTO' end> end> Name = 'PedidosCliente' @@ -422,6 +430,15 @@ object srvPedidosCliente: TsrvPedidosCliente Name = 'NUM_CORREOS' DataType = datSmallInt DictionaryEntry = 'PedidosCliente_NUM_CORREOS' + end + item + Name = 'ID_PRESUPUESTO' + DataType = datInteger + end + item + Name = 'REFERENCIA_PRESUPUESTO' + DataType = datString + Size = 255 end> end item @@ -1021,6 +1038,11 @@ object srvPedidosCliente: TsrvPedidosCliente Name = 'FECHA_PREVISTA_ENVIO' DataType = datDateTime Value = '' + end + item + Name = 'ID_PRESUPUESTO' + DataType = datInteger + Value = '' end> Statements = < item @@ -1035,15 +1057,15 @@ object srvPedidosCliente: TsrvPedidosCliente 'AS_ACTIVAS, OBSERVACIONES, FECHA_ALTA, FECHA_MODIFICACION,'#10' ' + 'IMPORTE_NETO, IMPORTE_PORTE, DESCUENTO,'#10' IMPORTE_DESCUENTO, ' + 'BASE_IMPONIBLE, IVA, IMPORTE_IVA,'#10' ID_FORMA_PAGO, REF_TIENDA' + - '_WEB, FECHA_PREVISTA_ENVIO)'#10' VALUES'#10' (:ID, :ID_EMPRESA, :ID_' + - 'CLIENTE, :ID_DIRECCION, :USUARIO, :FECHA_PEDIDO,'#10' :CALLE, :C' + - 'ODIGO_POSTAL, :POBLACION, :PROVINCIA, :PERSONA_CONTACTO,'#10' :T' + - 'ELEFONO, :REFERENCIA, :REFERENCIA_CLIENTE, :IMPORTE_TOTAL, :INCI' + - 'DENCIAS,'#10' :INCIDENCIAS_ACTIVAS, :OBSERVACIONES, :FECHA_ALTA,' + - #10' :FECHA_MODIFICACION, :IMPORTE_NETO, :IMPORTE_PORTE,'#10' :' + - 'DESCUENTO, :IMPORTE_DESCUENTO, :BASE_IMPONIBLE, :IVA,'#10' :IMPO' + - 'RTE_IVA, :ID_FORMA_PAGO, :REF_TIENDA_WEB, :FECHA_PREVISTA_ENVIO)' + - #10 + '_WEB, FECHA_PREVISTA_ENVIO, ID_PRESUPUESTO)'#10' VALUES'#10' (:ID, :' + + 'ID_EMPRESA, :ID_CLIENTE, :ID_DIRECCION, :USUARIO, :FECHA_PEDIDO,' + + #10' :CALLE, :CODIGO_POSTAL, :POBLACION, :PROVINCIA, :PERSONA_C' + + 'ONTACTO,'#10' :TELEFONO, :REFERENCIA, :REFERENCIA_CLIENTE, :IMPO' + + 'RTE_TOTAL, :INCIDENCIAS,'#10' :INCIDENCIAS_ACTIVAS, :OBSERVACION' + + 'ES, :FECHA_ALTA,'#10' :FECHA_MODIFICACION, :IMPORTE_NETO, :IMPOR' + + 'TE_PORTE,'#10' :DESCUENTO, :IMPORTE_DESCUENTO, :BASE_IMPONIBLE, ' + + ':IVA,'#10' :IMPORTE_IVA, :ID_FORMA_PAGO, :REF_TIENDA_WEB, :FECHA' + + '_PREVISTA_ENVIO, :ID_PRESUPUESTO)'#10 StatementType = stSQL ColumnMappings = <> end> @@ -1223,6 +1245,11 @@ object srvPedidosCliente: TsrvPedidosCliente DataType = datDateTime Value = '' end + item + Name = 'ID_PRESUPUESTO' + DataType = datInteger + Value = '' + end item Name = 'OLD_ID' Value = '' @@ -1248,8 +1275,8 @@ object srvPedidosCliente: TsrvPedidosCliente 'MPORTE_DESCUENTO = :IMPORTE_DESCUENTO,'#10' BASE_IMPONIBLE = :BAS' + 'E_IMPONIBLE,'#10' IVA = :IVA,'#10' IMPORTE_IVA = :IMPORTE_IVA,'#10' ' + ' ID_FORMA_PAGO = :ID_FORMA_PAGO,'#10' REF_TIENDA_WEB = :REF_TIEND' + - 'A_WEB,'#10' FECHA_PREVISTA_ENVIO = :FECHA_PREVISTA_ENVIO'#10' WHERE'#10 + - ' (ID = :OLD_ID)'#10 + 'A_WEB,'#10' FECHA_PREVISTA_ENVIO = :FECHA_PREVISTA_ENVIO,'#10' ID_' + + 'PRESUPUESTO = :ID_PRESUPUESTO'#10' WHERE'#10' (ID = :OLD_ID)'#10 StatementType = stSQL ColumnMappings = <> end> diff --git a/Source/Modulos/Pedidos de cliente/Views/uEditorPedidoCliente.dfm b/Source/Modulos/Pedidos de cliente/Views/uEditorPedidoCliente.dfm index d9e38bc..0961ccc 100644 --- a/Source/Modulos/Pedidos de cliente/Views/uEditorPedidoCliente.dfm +++ b/Source/Modulos/Pedidos de cliente/Views/uEditorPedidoCliente.dfm @@ -309,13 +309,14 @@ inherited fEditorPedidoCliente: TfEditorPedidoCliente ExplicitLeft = 278 ExplicitTop = 0 end - inherited ToolButton14: TToolButton [4] + inherited ToolButton14: TToolButton Left = 334 Top = 0 + Wrap = False ExplicitLeft = 334 ExplicitTop = 0 end - inherited FontName: TJvFontComboBox [5] + inherited FontName: TJvFontComboBox Left = 399 Top = 0 ExplicitLeft = 399 @@ -324,14 +325,18 @@ inherited fEditorPedidoCliente: TfEditorPedidoCliente inherited FontSize: TEdit Left = 544 Top = 0 - Width = 106 + Width = 122 ExplicitLeft = 544 ExplicitTop = 0 - ExplicitWidth = 106 + ExplicitWidth = 122 end inherited ToolButton13: TToolButton [7] + Left = 0 Top = 0 + Wrap = True + ExplicitLeft = 0 ExplicitTop = 0 + ExplicitHeight = 27 end inherited UpDown1: TUpDown [8] Left = 0 @@ -339,38 +344,37 @@ inherited fEditorPedidoCliente: TfEditorPedidoCliente ExplicitLeft = 0 ExplicitTop = 27 end - inherited ToolButton6: TToolButton [9] + inherited ToolButton6: TToolButton Left = 17 Top = 27 ExplicitLeft = 17 ExplicitTop = 27 end - inherited ToolButton7: TToolButton [10] + inherited ToolButton7: TToolButton Left = 83 Top = 27 ExplicitLeft = 83 ExplicitTop = 27 end - inherited ToolButton8: TToolButton [11] + inherited ToolButton8: TToolButton Left = 150 Top = 27 ExplicitLeft = 150 ExplicitTop = 27 end - inherited ToolButton12: TToolButton [12] + inherited ToolButton12: TToolButton Left = 233 Top = 27 ExplicitLeft = 233 ExplicitTop = 27 - ExplicitHeight = 22 end - inherited ToolButton9: TToolButton [13] + inherited ToolButton9: TToolButton Left = 241 Top = 27 ExplicitLeft = 241 ExplicitTop = 27 end - inherited ToolButton10: TToolButton [14] + inherited ToolButton10: TToolButton Left = 386 Top = 27 ExplicitLeft = 386 diff --git a/Source/Modulos/Pedidos de cliente/Views/uEditorPedidoCliente.pas b/Source/Modulos/Pedidos de cliente/Views/uEditorPedidoCliente.pas index 9feec5d..4bdce47 100644 --- a/Source/Modulos/Pedidos de cliente/Views/uEditorPedidoCliente.pas +++ b/Source/Modulos/Pedidos de cliente/Views/uEditorPedidoCliente.pas @@ -64,13 +64,13 @@ type procedure OnClienteChanged(Sender : TObject); function PuedoImprimir: Boolean; override; function PuedoEnviar: Boolean; virtual; - + //Si queremos crear otra vista para el editor heredado solo tendriamos que //sobreescribir este metodo procedure AsignarVista; virtual; property ViewPedido: IViewPedidoCliente read GetViewPedido write SetViewPedido; - + public procedure PonerTitulos(const ATitulo: string = ''); override; property Controller : IPedidosClienteController read GetController write SetController; @@ -128,7 +128,6 @@ constructor TfEditorPedidoCliente.Create(AOwner: TComponent); begin inherited; pgPaginas.ActivePageIndex := 0; - AsignarVista; end; diff --git a/Source/Modulos/Pedidos de cliente/Views/uViewDatosYSeleccionClientePedido.pas b/Source/Modulos/Pedidos de cliente/Views/uViewDatosYSeleccionClientePedido.pas index 66eb331..8c256a5 100644 --- a/Source/Modulos/Pedidos de cliente/Views/uViewDatosYSeleccionClientePedido.pas +++ b/Source/Modulos/Pedidos de cliente/Views/uViewDatosYSeleccionClientePedido.pas @@ -318,7 +318,6 @@ begin if (not FDireccion.FAXIsNull) and (FDireccion.FAX <> '') then ACadena := ACadena + #13#10 + 'Fax: ' + FDireccion.FAX; - end; edtDireccion.Text := ACadena; diff --git a/Source/Modulos/Pedidos de cliente/Views/uViewDetallesPedidoCliente.dfm b/Source/Modulos/Pedidos de cliente/Views/uViewDetallesPedidoCliente.dfm index 6c10734..7ab351b 100644 --- a/Source/Modulos/Pedidos de cliente/Views/uViewDetallesPedidoCliente.dfm +++ b/Source/Modulos/Pedidos de cliente/Views/uViewDetallesPedidoCliente.dfm @@ -23,15 +23,17 @@ inherited frViewDetallesPedidoCliente: TfrViewDetallesPedidoCliente end inherited FontSize: TEdit Top = 22 - Width = 74 + Width = 106 ExplicitTop = 22 - ExplicitWidth = 74 + ExplicitWidth = 106 end inherited ToolButton13: TToolButton [7] Left = 0 Top = 22 + Wrap = True ExplicitLeft = 0 ExplicitTop = 22 + ExplicitHeight = 27 end inherited UpDown1: TUpDown [8] Left = 0 @@ -87,11 +89,9 @@ inherited frViewDetallesPedidoCliente: TfrViewDetallesPedidoCliente inherited cxGrid: TcxGrid Top = 126 Height = 178 + ExplicitTop = 126 + ExplicitHeight = 178 inherited cxGridView: TcxGridDBTableView - inherited cxGridViewTIPO: TcxGridDBColumn - Visible = False - VisibleForCustomization = False - end inherited cxGridViewREFERENCIA_PROVEEDOR: TcxGridDBColumn Properties.Buttons = < item @@ -118,7 +118,9 @@ inherited frViewDetallesPedidoCliente: TfrViewDetallesPedidoCliente end inherited TBXDock1: TTBXDock Top = 100 + ExplicitTop = 100 inherited TBXToolbar1: TTBXToolbar + DockPos = 0 inherited TBXSubmenuItem1: TTBXSubmenuItem Visible = False end @@ -132,7 +134,6 @@ inherited frViewDetallesPedidoCliente: TfrViewDetallesPedidoCliente inherited ActionListContenido: TActionList inherited actExportar: TAction Enabled = False - Visible = False end end inherited GridGeneralPopupMenu: TPopupMenu diff --git a/Source/Modulos/Pedidos de cliente/Views/uViewPedidosCliente.dfm b/Source/Modulos/Pedidos de cliente/Views/uViewPedidosCliente.dfm index 681f50f..f511410 100644 --- a/Source/Modulos/Pedidos de cliente/Views/uViewPedidosCliente.dfm +++ b/Source/Modulos/Pedidos de cliente/Views/uViewPedidosCliente.dfm @@ -145,6 +145,10 @@ inherited frViewPedidosCliente: TfrViewPedidosCliente Visible = False VisibleForCustomization = False end + object cxGridViewREFERENCIA_PRESUPUESTO: TcxGridDBColumn + Caption = 'Ref. presupuesto' + DataBinding.FieldName = 'REFERENCIA_PRESUPUESTO' + end end object cxGridDBTableView1: TcxGridDBTableView [1] NavigatorButtons.ConfirmDelete = False diff --git a/Source/Modulos/Pedidos de cliente/Views/uViewPedidosCliente.pas b/Source/Modulos/Pedidos de cliente/Views/uViewPedidosCliente.pas index 08b07ae..d438547 100644 --- a/Source/Modulos/Pedidos de cliente/Views/uViewPedidosCliente.pas +++ b/Source/Modulos/Pedidos de cliente/Views/uViewPedidosCliente.pas @@ -50,6 +50,7 @@ type cxGridViewNUM_COPIAS: TcxGridDBColumn; cxGridViewNUM_CORREOS: TcxGridDBColumn; cxGridViewREFERENCIA_CLIENTE: TcxGridDBColumn; + cxGridViewREFERENCIA_PRESUPUESTO: TcxGridDBColumn; procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView; diff --git a/Source/Modulos/Presupuestos de cliente/Controller/PresupuestosCliente_controller.dpk b/Source/Modulos/Presupuestos de cliente/Controller/PresupuestosCliente_controller.dpk index 25e2249bb27c0af4c18700fc3bf0aad9ffabcf2a..9c874c3fdf33e1d731d6cbdcf4852632b638d9d7 100644 GIT binary patch delta 275 zcmbQwJDq<+CsVx+FPDNsQArM%E=z{cDM>JqZ&1{zoa))thS>z|aBnp{#G50a0EDK~LREJ<`sDlREXOfEr{0_sgk zg4kJ{mskL1C8p#9UADQCiHju=EKnMfS&&~GP?TC+T2Pu=T$1mcpI1_ppOceXq>!1X ZppHjguOP8l-I|w+mn$_dMUR(@0RZT%QOf`T delta 25 gcmbQvKc9C)C(~vdW-b;UYhEs1uGG8~Jzg#b09V%qe*gdg diff --git a/Source/Modulos/Presupuestos de cliente/Controller/PresupuestosCliente_controller.dproj b/Source/Modulos/Presupuestos de cliente/Controller/PresupuestosCliente_controller.dproj index 0143b92..58eb2f0 100644 --- a/Source/Modulos/Presupuestos de cliente/Controller/PresupuestosCliente_controller.dproj +++ b/Source/Modulos/Presupuestos de cliente/Controller/PresupuestosCliente_controller.dproj @@ -49,16 +49,30 @@ MainSource + + + + + + + + + + + + + + + + - - - - - - + + + + diff --git a/Source/Modulos/Presupuestos de cliente/Controller/uDetallesPresupuestoClienteController.pas b/Source/Modulos/Presupuestos de cliente/Controller/uDetallesPresupuestoClienteController.pas index f7aeb89..81db084 100644 --- a/Source/Modulos/Presupuestos de cliente/Controller/uDetallesPresupuestoClienteController.pas +++ b/Source/Modulos/Presupuestos de cliente/Controller/uDetallesPresupuestoClienteController.pas @@ -14,7 +14,7 @@ type procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function VariarPrecios(var APorcentaje: Variant; var ATipoOperacion: Integer): Boolean; - procedure AplicarAumento(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray; APorcentaje: Variant); + procedure AplicarAumento(ADataTable: IDAStronglyTypedDataTable; Posicion: TIntegerArray; APorcentaje: Variant); end; TDetallesPresupuestoClienteController = class(TControllerDetallesArticulos, IDetallesPresupuestoClienteController) @@ -188,12 +188,22 @@ begin end; procedure TDetallesPresupuestoClienteController.RellenarOtros(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); +var + AField: TDAField; + begin -//En Tecsitel no se tiene en cuenta el descuento de cliente para el precio PVP -// if Assigned(AArticulos) then -// ADetalles.DataTable.FieldByName(CAMPO_DESCUENTO).AsFloat := AArticulos.DESCUENTO -// else -// ADetalles.DataTable.FieldByName(CAMPO_DESCUENTO).AsFloat := 0; + if Assigned(AArticulos) then + ADetalles.DataTable.FieldByName(CAMPO_DESCUENTO).AsFloat := AArticulos.DESCUENTO + else + ADetalles.DataTable.FieldByName(CAMPO_DESCUENTO).AsFloat := 0; + + //Sobreescribimos el id del articulo por el campo ID_ARTICULO que nos hemos tenido que crear para + //almacenar el codigo de artículo ya que ID esta destinado a ID_ARTICULO||ID_PROVEEDOR, para identificar de forma + //unica los articulos desglosados por proveedor. + AField := AArticulos.DataTable.FindField(CAMPO_ID_ARTICULOS); + if Assigned(AField) then + ADetalles.DataTable.FieldByName(CAMPO_ID_ARTICULOS).AsVariant := AField.AsVariant; + end; procedure TDetallesPresupuestoClienteController.ValidarCampos(DataTable: TDADataTable); @@ -226,13 +236,10 @@ end; procedure TDetallesPresupuestoClienteController.RellenarImportes(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); begin -//Como en tecsitel no hay descuento por linea de detalle, solo recuperamos nuevamente el valor del articulo cuando el detalle no tenga niguno -//de esta forma evitamos que al cambiar de cliente se quiten los importes que se hubiesen establecido para los articulos. - if ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_UNIDAD).IsNull then - if Assigned(AArticulos) then - ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_UNIDAD).AsVariant := AArticulos.PRECIO_NETO - else - ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_UNIDAD).AsVariant := Null; + if Assigned(AArticulos) then + ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_UNIDAD).AsVariant := AArticulos.PRECIO_COSTE + else + ADetalles.DataTable.FieldByName(CAMPO_IMPORTE_UNIDAD).AsVariant := Null; end; end. diff --git a/Source/Modulos/Presupuestos de cliente/Controller/uPresupuestosClienteController.pas b/Source/Modulos/Presupuestos de cliente/Controller/uPresupuestosClienteController.pas index 0d3e189..b6d67dd 100644 --- a/Source/Modulos/Presupuestos de cliente/Controller/uPresupuestosClienteController.pas +++ b/Source/Modulos/Presupuestos de cliente/Controller/uPresupuestosClienteController.pas @@ -286,7 +286,7 @@ begin with Result.DataTable.DynamicWhere do begin // (ID_FACTURA = NULL) - Condicion := NewBinaryExpression(NewField('', fld_PresupuestosClienteID_FACTURA), NewNull(), dboEqual); + Condicion := NewBinaryExpression(NewField('', fld_PresupuestosClienteID_FACTURA_PROFORMA), NewNull(), dboEqual); if IsEmpty then Expression := Condicion @@ -457,7 +457,7 @@ begin FECHA_PRESUPUESTO := DateOf(Now); INCIDENCIAS_ACTIVAS := 0; INCIDENCIASIsNull := True; - ID_FACTURAIsNull := True; + ID_FACTURA_PROFORMAIsNull := True; FECHA_DECISIONIsNull := True; REFERENCIA := ''; SITUACION := SITUACION_PRESUPUESTO_PENDIENTE; diff --git a/Source/Modulos/Presupuestos de cliente/Controller/uPresupuestosClienteReportController.pas b/Source/Modulos/Presupuestos de cliente/Controller/uPresupuestosClienteReportController.pas index c01f9b1..0f7f445 100644 --- a/Source/Modulos/Presupuestos de cliente/Controller/uPresupuestosClienteReportController.pas +++ b/Source/Modulos/Presupuestos de cliente/Controller/uPresupuestosClienteReportController.pas @@ -185,7 +185,7 @@ begin AEditor.ListaID := AListaID; AEditor.Title := 'Presupuesto - ' + AppFactuGES.EmpresaActiva.NOMBRE; AEditor.LoadFromStream(AStream); - AEditor.TablaImpresion := nme_PresupuestosCliente; +// AEditor.TablaImpresion := nme_PresupuestosCliente; AEditor.IdTablaImpresion := AListaID.ToString; AEditor.Print; finally diff --git a/Source/Modulos/Presupuestos de cliente/Controller/uTiposPresupuestoController.pas b/Source/Modulos/Presupuestos de cliente/Controller/uTiposPresupuestoController.pas new file mode 100644 index 0000000..3da3024 --- /dev/null +++ b/Source/Modulos/Presupuestos de cliente/Controller/uTiposPresupuestoController.pas @@ -0,0 +1,222 @@ +unit uTiposPresupuestoController; + +interface + + +uses + Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem, + uIDataModulePresupuestosCliente, uBizTiposPresupuesto; + +type + ITiposPresupuestoController = interface(IControllerBase) + ['{7BFA4153-A300-462F-A4C5-F3140360F088}'] + function BuscarTodos: IBizTipoPresupuesto; + procedure VerTodos(ATiposPresupuesto: IBizTipoPresupuesto); + procedure Anadir(ATipoPresupuesto : IBizTipoPresupuesto); + function Eliminar(ATipoPresupuesto : IBizTipoPresupuesto): Boolean; + function Guardar(ATipoPresupuesto : IBizTipoPresupuesto): Boolean; + procedure DescartarCambios(ATipoPresupuesto : IBizTipoPresupuesto); + function Localizar(ATiposPresupuesto: IBizTipoPresupuesto; ADescripcion:String): Boolean; + function DarListaTiposPresupuesto: TStringList; + end; + + TTiposPresupuestoController = class(TControllerBase, ITiposPresupuestoController) + protected + FDataModule : IDataModulePresupuestosCliente; + procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override; + function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean; + function ValidarTipoPresupuesto(ATipoPresupuesto: IBizTipoPresupuesto): Boolean; + procedure AsignarDataModule; virtual; + public + constructor Create; override; + destructor Destroy; override; + + function Eliminar(ATipoPresupuesto : IBizTipoPresupuesto): Boolean; + function Guardar(ATipoPresupuesto : IBizTipoPresupuesto): Boolean; + procedure DescartarCambios(ATipoPresupuesto : IBizTipoPresupuesto); virtual; + procedure Anadir(ATipoPresupuesto : IBizTipoPresupuesto); + function BuscarTodos: IBizTipoPresupuesto; + procedure VerTodos(ATiposPresupuesto: IBizTipoPresupuesto); + function Localizar(ATiposPresupuesto: IBizTipoPresupuesto; ADescripcion:String): Boolean; + function DarListaTiposPresupuesto: TStringList; + end; + +implementation + +uses + cxControls, DB, uEditorRegistryUtils, +// uIEditorTiposPresupuesto, + uDataModulePresupuestosCliente, + uDAInterfaces, uDataTableUtils, + uDateUtils, uROTypes, DateUtils, Controls, Windows, schPresupuestosClienteClient_Intf; + +{ TTiposPresupuestoController } + +procedure TTiposPresupuestoController.Anadir(ATipoPresupuesto: IBizTipoPresupuesto); +begin + ATipoPresupuesto.Insert; +end; + +procedure TTiposPresupuestoController.AsignarDataModule; +begin + FDataModule := TDataModulePresupuestosCliente.Create(Nil); +end; + +function TTiposPresupuestoController.BuscarTodos: IBizTipoPresupuesto; +begin + Result := FDataModule.GetTiposPresupuesto; +end; + +constructor TTiposPresupuestoController.Create; +begin + inherited; + AsignarDataModule; +end; + +function TTiposPresupuestoController.CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; +begin + Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); +end; + +function TTiposPresupuestoController.DarListaTiposPresupuesto: TStringList; +var + ATiposPresupuesto: IBizTipoPresupuesto; +begin + ATiposPresupuesto := BuscarTodos; + ATiposPresupuesto.DataTable.Active := True; + Result := TStringList.Create; + try + with Result do + begin + ATiposPresupuesto.DataTable.First; + while not ATiposPresupuesto.DataTable.EOF do + begin + Add(ATiposPresupuesto.DESCRIPCION); + ATiposPresupuesto.DataTable.Next; + end; + end; + finally + ATiposPresupuesto := NIL; + end; +end; + +procedure TTiposPresupuestoController.DescartarCambios(ATipoPresupuesto: IBizTipoPresupuesto); +begin + if not Assigned(ATipoPresupuesto) then + raise Exception.Create ('GrupoCliente no asignado'); + + ShowHourglassCursor; + try + if (ATipoPresupuesto.State in dsEditModes) then + ATipoPresupuesto.Cancel; + + ATipoPresupuesto.DataTable.CancelUpdates; + finally + HideHourglassCursor; + end; +end; + +destructor TTiposPresupuestoController.Destroy; +begin + FDataModule := Nil; + inherited; +end; + +function TTiposPresupuestoController.ValidarTipoPresupuesto(ATipoPresupuesto: IBizTipoPresupuesto): Boolean; +begin + if not Assigned(ATipoPresupuesto) then + raise Exception.Create ('TipoCliente no asignada'); + + if (ATipoPresupuesto.DataTable.State in dsEditModes) then + ATipoPresupuesto.DataTable.Post; + + if Length(ATipoPresupuesto.DESCRIPCION) = 0 then + raise Exception.Create('Debe indicar al menos la descripción de este tipo.'); + + Result := True; +end; + +procedure TTiposPresupuestoController.VerTodos(ATiposPresupuesto: IBizTipoPresupuesto); +//var +// AEditor : IEditorTiposPresupuesto; +begin +{ + AEditor := NIL; + + CreateEditor('EditorTiposPresupuesto', IEditorTiposPresupuesto, AEditor); + if Assigned(AEditor) then + try + AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE + AEditor.TiposPresupuesto := ATiposPresupuesto; + AEditor.ShowModal; + finally + AEditor.Release; + AEditor := NIL; + end; +} +end; + +function TTiposPresupuestoController.Eliminar(ATipoPresupuesto: IBizTipoPresupuesto): Boolean; +begin + if not Assigned(ATipoPresupuesto) then + raise Exception.Create ('TipoCliente no asignada'); + + ShowHourglassCursor; + try + if (ATipoPresupuesto.State in dsEditModes) then + ATipoPresupuesto.Cancel; + + ATipoPresupuesto.Delete; + ATipoPresupuesto.DataTable.ApplyUpdates; + HideHourglassCursor; + Result := True; + finally + HideHourglassCursor; + end; +end; + +procedure TTiposPresupuestoController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); +begin + inherited; +// +end; + +function TTiposPresupuestoController.Guardar(ATipoPresupuesto: IBizTipoPresupuesto): Boolean; +begin + Result := False; + + if ValidarTipoPresupuesto(ATipoPresupuesto) then + begin + ShowHourglassCursor; + try + if (ATipoPresupuesto.DataTable.State in dsEditModes) then + ATipoPresupuesto.DataTable.Post; + + ATipoPresupuesto.DataTable.ApplyUpdates; + + Result := True; + finally + HideHourglassCursor; + end; + end; +end; + +function TTiposPresupuestoController.Localizar(ATiposPresupuesto: IBizTipoPresupuesto; ADescripcion: String): Boolean; +begin + Result := True; + ShowHourglassCursor; + try + with ATiposPresupuesto.DataTable do + begin + DisableControls; + First; + if not Locate(fld_TiposPresupuestoDESCRIPCION, ADescripcion, []) then + Result := False; + EnableControls; + end; + finally + HideHourglassCursor; + end; +end; + +end. diff --git a/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.dfm b/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.dfm index 549b421..a05f07e 100644 --- a/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.dfm +++ b/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.dfm @@ -218,11 +218,11 @@ inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente DictionaryEntry = 'PresupuestosCliente_ID_FORMA_PAGO' end item - Name = 'ID_FACTURA' + Name = 'ID_FACTURA_PROFORMA' DataType = datInteger end item - Name = 'FACTURA' + Name = 'FACTURA_PROFORMA' DataType = datString Size = 255 end @@ -242,6 +242,19 @@ inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente Name = 'IMPORTE_BONIFICACION' DataType = datCurrency ServerAutoRefresh = True + end + item + Name = 'FECHA_VIGENCIA' + DataType = datDateTime + end + item + Name = 'TIPO_PRESUPUESTO' + DataType = datString + Size = 255 + end + item + Name = 'ID_TIPO_IVA' + DataType = datInteger end> Params = <> StreamingOptions = [soDisableEventsWhileStreaming] @@ -406,4 +419,37 @@ inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente Left = 248 Top = 144 end + object tbl_TiposPresupuesto: TDAMemDataTable + RemoteUpdatesOptions = [] + Fields = < + item + Name = 'ID' + DataType = datAutoInc + GeneratorName = 'GEN_PRESUPUESTOS_TIPOS_ID' + Required = True + DisplayLabel = 'TiposPresupuesto_ID' + DictionaryEntry = 'TiposPresupuesto_ID' + InPrimaryKey = True + end + item + Name = 'DESCRIPCION' + DataType = datString + Size = 255 + DisplayLabel = 'TiposPresupuesto_DESCRIPCION' + DictionaryEntry = 'TiposPresupuesto_DESCRIPCION' + end> + Params = <> + StreamingOptions = [soDisableEventsWhileStreaming] + RemoteDataAdapter = rda_PresupuestosCliente + LogicalName = 'TiposPresupuesto' + IndexDefs = <> + Left = 464 + Top = 208 + end + object ds_TiposPresupuesto: TDADataSource + DataSet = tbl_TiposPresupuesto.Dataset + DataTable = tbl_TiposPresupuesto + Left = 464 + Top = 152 + end end diff --git a/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.pas b/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.pas index b617682..25776cf 100644 --- a/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.pas +++ b/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.pas @@ -11,7 +11,7 @@ uses uIDataModulePresupuestosCliente, uBizPresupuestosCliente, uBizDetallesPresupuestoCliente, uIDataModulePresupuestosClienteReport, uDataModuleBase, uDAInterfaces, uRODynamicRequest, uDADataStreamer, uDARemoteDataAdapter, uDABin2DataStreamer, - uDAMemDataTable, uIntegerListUtils; + uDAMemDataTable, uIntegerListUtils, uBizTiposPresupuesto; type TDataModulePresupuestosCliente = class(TDataModuleBase, IDataModulePresupuestosCliente, IDataModulePresupuestosClienteReport) @@ -25,6 +25,8 @@ type RORemoteService1: TRORemoteService; tbl_ListaAnosPresupuestos: TDAMemDataTable; ds_ListaAnosPresupuestos: TDADataSource; + tbl_TiposPresupuesto: TDAMemDataTable; + ds_TiposPresupuesto: TDADataSource; procedure DAClientDataModuleCreate(Sender: TObject); private @@ -46,7 +48,8 @@ type function GetRptWordCertificadoTrabajos(const AID: Integer): Binary; function GetRptPDFPresupuesto(const AID: Integer; Const AVerSello: Integer): Binary; - function GetAnosItems : TStringList; + function GetAnosItems : TStringList; + function GetTiposPresupuesto : IBizTipoPresupuesto; end; implementation @@ -98,12 +101,27 @@ end; function TDataModulePresupuestosCliente.GetRptWordCertificadoTrabajos( const AID: Integer): Binary; begin - Result := (RORemoteService as IsrvPresupuestosCliente).GenerarCertificadoTrabajosEnWord(AID) +// Result := (RORemoteService as IsrvPresupuestosCliente).GenerarCertificadoTrabajosEnWord(AID) end; function TDataModulePresupuestosCliente.GetRptWordPresupuesto(const AID: Integer; Const AVerSello: Integer): Binary; begin - Result := (RORemoteService as IsrvPresupuestosCliente).GenerarInformeEnWord(AID, AVerSello) +// Result := (RORemoteService as IsrvPresupuestosCliente).GenerarInformeEnWord(AID, AVerSello) +end; + +function TDataModulePresupuestosCliente.GetTiposPresupuesto: IBizTipoPresupuesto; +var + ATipoPresupuesto : TDAMemDataTable; +begin + ShowHourglassCursor; + try + ATipoPresupuesto := CloneDataTable(tbl_TiposPresupuesto); + ATipoPresupuesto.BusinessRulesID := BIZ_CLIENT_TIPOSPRESUPUESTO; + Result := (ATipoPresupuesto as IBizTipoPresupuesto); + finally + HideHourglassCursor; + end; + end; function TDataModulePresupuestosCliente.NewItem: IBizPresupuestoCliente; diff --git a/Source/Modulos/Presupuestos de cliente/Model/Data/uIDataModulePresupuestosCliente.pas b/Source/Modulos/Presupuestos de cliente/Model/Data/uIDataModulePresupuestosCliente.pas index 74a027c..b244ba3 100644 --- a/Source/Modulos/Presupuestos de cliente/Model/Data/uIDataModulePresupuestosCliente.pas +++ b/Source/Modulos/Presupuestos de cliente/Model/Data/uIDataModulePresupuestosCliente.pas @@ -4,7 +4,7 @@ interface uses Classes, uROTypes, uBizPresupuestosCliente, uBizDetallesPresupuestoCliente, - uIntegerListUtils; + uIntegerListUtils, uBizTiposPresupuesto; type IDataModulePresupuestosCliente = interface @@ -14,6 +14,7 @@ type function GetItems(const AListaID: TIntegerList) : IBizPresupuestoCliente; overload; function GetItem(const ID : Integer) : IBizPresupuestoCliente; function NewItem : IBizPresupuestoCliente; + function GetTiposPresupuesto : IBizTipoPresupuesto; end; implementation diff --git a/Source/Modulos/Presupuestos de cliente/Model/PresupuestosCliente_model.dpk b/Source/Modulos/Presupuestos de cliente/Model/PresupuestosCliente_model.dpk index f67bdc8..6e4e584 100644 --- a/Source/Modulos/Presupuestos de cliente/Model/PresupuestosCliente_model.dpk +++ b/Source/Modulos/Presupuestos de cliente/Model/PresupuestosCliente_model.dpk @@ -25,14 +25,9 @@ package PresupuestosCliente_model; {$IMPLICITBUILD OFF} requires - rtl, - dbrtl, - vcl, - vcldb, - dsnap, - adortl, Base, - Contactos_model; + Contactos_model, + TiposIVA_controller; contains uIDataModulePresupuestosCliente in 'Data\uIDataModulePresupuestosCliente.pas', @@ -40,6 +35,7 @@ contains uBizPresupuestosCliente in 'uBizPresupuestosCliente.pas', uIDataModulePresupuestosClienteReport in 'Data\uIDataModulePresupuestosClienteReport.pas', schPresupuestosClienteClient_Intf in 'schPresupuestosClienteClient_Intf.pas', - schPresupuestosClienteServer_Intf in 'schPresupuestosClienteServer_Intf.pas'; + schPresupuestosClienteServer_Intf in 'schPresupuestosClienteServer_Intf.pas', + uBizTiposPresupuesto in 'uBizTiposPresupuesto.pas'; end. diff --git a/Source/Modulos/Presupuestos de cliente/Model/PresupuestosCliente_model.dproj b/Source/Modulos/Presupuestos de cliente/Model/PresupuestosCliente_model.dproj index a9dc511..d72cc2a 100644 --- a/Source/Modulos/Presupuestos de cliente/Model/PresupuestosCliente_model.dproj +++ b/Source/Modulos/Presupuestos de cliente/Model/PresupuestosCliente_model.dproj @@ -43,6 +43,12 @@ Package FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0 + + + + + + RemObjects Pascal Script - RemObjects SDK 3.0 Integration EurekaLog 5.1.9 PresupuestosCliente_model.dpk @@ -52,20 +58,16 @@ MainSource - - - - - - - - + + + + - diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.dpk b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.dpk deleted file mode 100644 index 57cd942..0000000 --- a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.dpk +++ /dev/null @@ -1,48 +0,0 @@ -package PedProv_FacProv_relation; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST OFF} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$IMPLICITBUILD OFF} - -requires - rtl, - Base, - ControllerBase, - Contactos_model, - Contactos_controller, - PNG_D10, - vcl, - JSDialog100, - vclx, - vclactnband, - xmlrtl, - designide, - FacturasProveedor_model, - FacturasProveedor_controller, - PedidosProveedor_controller, - PedidosProveedor_model; - -contains - uGenerarFacturasProvPedProvUtils in 'uGenerarFacturasProvPedProvUtils.pas'; - -end. diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.dproj b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.dproj deleted file mode 100644 index 2322789..0000000 --- a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.dproj +++ /dev/null @@ -1,219 +0,0 @@ - - - {69494a8c-0a35-41ea-b8ec-ea790bfc0662} - PedProv_FacProv_relation.dpk - Debug - AnyCPU - DCC32 - ..\..\..\..\Output\Debug\Cliente\PedProv_FacProv_relation.bpl - - - 7.0 - False - False - 0 - .\ - .\ - .\ - ..\..\..\..\Output\Debug\Cliente - ..\..\Lib - ..\..\..\Lib;..\..\Lib - ..\..\..\Lib;..\..\Lib - ..\..\..\Lib;..\..\Lib - ..\..\..\Lib;..\..\Lib - RELEASE - - - 7.0 - .\ - .\ - .\ - ..\..\..\..\Output\Debug\Cliente - ..\..\Lib - ..\..\..\Lib;..\..\Lib - ..\..\..\Lib;..\..\Lib - ..\..\..\Lib;..\..\Lib - ..\..\..\Lib;..\..\Lib - DEBUG - - - Delphi.Personality - Package - - - False - True - False - - - False - False - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 3082 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Borland Sample Components - Delphi 1.0 Compatibility Components - Borland MyBase DataAccess Components - TeeChart Components - Borland SimpleDataset Component (DBX) - ExpressBars extended items by Developer Express Inc. - ExpressBars by Developer Express Inc. - ExpressScheduler 2 by Developer Express Inc. - ExpressVerticalGrid by Developer Express Inc. - ExpressBars DBNavigator by Developer Express Inc. - ExpressBars extended DB items by Developer Express Inc. - ExpressSideBar by Developer Express Inc. - JVCL Band Objects - JVCL Non-Visual Components - JVCL Encryption and Compression Components - JVCL Dialog Components - JVCL Docking Components - JVCL DotNet Controls - JVCL EDI Components Designtime Package - JVCL HMI Controls design time unit - JVCL Interpreter Components - JVCL Jans Components - JVCL Managed Threads - JVCL Multimedia and Image Components - JVCL Network Components - JVCL Page Style Components - JVCL Plugin Components - JVCL Print Preview Components - JVCL Runtime Design Components - JVCL Time Framework - JVCL Unified Interbase Components - JVCL Validators and Error Provider Components - SMImport suite: data importing into dataset. Scalabium/Mike Shkolnik, 2000-2005 - SMExport suite: data export from dataset. Written by Mike Shkolnik/Scalabium, 1998-2004. - Intraweb 8.0 Design Package for Borland Development Studio 2006 - Internet Explorer Components - - - PedProv_FacProv_relation.dpk - - - - - - - MainSource - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.rc b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.rc deleted file mode 100644 index e69de29..0000000 diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.res b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PedProv_FacProv_relation.res deleted file mode 100644 index 86c94e6ada7b3c85f6761b1ee234a9f34ef3c861..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5056 zcmbW5&x;&Y5XWnifD(f4!IPI+L`3!=E9BmaF%VEA#@TDLXpF&R6XJUC)cc=I4kFSA z{{!hg%bp}hVRP_qjvmDJ`>A@>-7}euyEfF+`%$mH-*3IwZ-y~5+miKtn3_w^Pn$V^ zQ861nx4C)wN(Q~H#+K|o*@m~&(3=1I%Llk7>S*pvE7;Yjz^+ljNYba;|&8!P>=GYp<9J^QiRC`-*du(Wb zBJI+RemE@Tm2dSSKL$269_p-ia&WJ{$B|EYy#Bt1`fm?B(CB-l8nlXqgY!6fUOzP@ zr|Te|e4cZxgJWuLF8<`}dughP69?9a%ha4}r`jtX-7UCl^he&nV;_S<)Ya!2FlEJu zrr{t12%dXkNqpywX{@?Eb_MKs@29XRNI;2D%DxW zo|xv^jnf#kFIDZr^e=W==PW{#^6Ao{deqzuxId;ujOZ~3;otiwSzBXu3^t3 z&$C~D3=Umz@OQRR9+}nP>x>=u115dAI{rd2#Mbgv81-@e%IA6)a8SDwHm3Di`~F1x z)jhG~04Fd5o4f^Iah!WFIS0|E#)aohzS6onIG_;>-~Ytz3J0A}=DenTZ*cIo-Ves9 zp>qHmo5lV+rntk2He9_1!t%2yZsF;l)>iGc4jkU$0bBWEPmBKKP>uSjxhXIDsSodT z@EG|gFZa>|hHF!PaN};FzIxxlpPKT;87{i(!eu7T%H?}r^yeP=K2c}If`cyKd-3DW z_4ib`jDt-MZ?C~;z1O=EKN(!YbpFJR_c`u>(C=ph9O_Y*Jz5Z>`Zs7T9Mn$y@ay$^ z{gulxYxXwGq@TIGbG$~Hi*qk8?9|WMkNweF@MU18F;AQKZ>jcWAL86`f59r^Yh;+XfGU10gV*5=*FT)q#qz2B_Ik28(#vUlW{{>1m(1wXK3zHQ3+RoHfz^$cuqg(^F;eqz6WUMUE^m$ z9R1u2H_t9ue%}<_JcD5KB$svgjBysd-ql#|toxF$&>h1Qc)Vw6j~u{SeHg>my$i{SJtD^MnJV!{AK!ZgN9Q4bN2bs7?m1Qo zsLwc-c&GZ4_%7jWppm+9C(?(bpCye?f6Mv)ml~{r9)<=EoH5SYSxm8xsWZv%2MjL$ zd)R%{gxqI&lEaJ6!*jggJMcIz?<5?~hn@VA1Kzcrp$;C`m0CzQdy{!G?|FT$$5W3N zaydTsdE#>2dGSt*&wOX~r{!54?~lxS4gM|rOZH6mRCZMCP#!z)bEv-^up_gJ*i*BY zl>1d-%!E}5v+s{C_OF@Qj;!xrv5)P2yJ4TmKCqke`Aq-U;NJ}WpRu*&|7!3r$c7zU zF#m_6?>Cia!E%D)b;IaF{ zzPG~QEyw>z^LKm}whzS>Dx3Ct`1w98?Y5 - ButtonBar.Buttons = [] - ButtonBar.Cancel = cbOK - ButtonBar.UseCancel = False - MainIcon = tdiCustom - Title = 'FactuGES' - Position = dpMainFormCenter - Icon.Data = { - 0000010003002020100001000400E8020000360000002020000001000800A808 - 00001E0300002020000001002000A8100000C60B000028000000200000004000 - 0000010004000000000000020000000000000000000000000000000000000000 - 000000008000008000000080800080000000800080008080000080808000C0C0 - C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 - 0000000000000000000000000000000008777777777777777777777700000000 - 0877767777677776777767760000000008F88888888888888888888700000000 - 08F8FF8F8F888888888888860000000008FF8F8F88F8F8888888888C00000000 - 08F88888F8888888888888860000000008F8688878E8888E88E8788700000000 - 08F8688888F8F8FFFFFF88760000000008FF4888888F8FFFFFFF788700000000 - 08F8676767677677677658E50000000008FF8888888887878787888700000000 - 08FF8887887E8888888888860000000008FFE8E8E788C8E8FF8F8F8600000000 - 08FFF8F8F8F8FF8F88F8F8870000000008FFFFFF8FF8F8F8F88F888600000000 - 0FF8477878787878788788860000000008FF68888888F8FF8F8F788700000000 - 08B7588888FF8FFFFFFF78860000083008BB47887776777777776F86000000B7 - 8B9B73BB88788787E87878870000008BB8B9BB78888888EFF8F8FF8600000087 - B8BB8B888E8E8E88FFF8F886000000088BBB888FFFFFFFFFF8F877770000B9BB - B8FFBB9B9BFFFFFFF87466460000BBB9BB8FBBBBB8FFFFFFF88F888700000008 - B8BB88888FFFFFFFF88F8F7700000008BBBBBB8FFFFFFFFFFF8887700000007B - B7B98BB8FFFFFFFFF8887700000000B78B9B87B888F88F88F8877000000007B0 - 08BB883B78888788787700000000000000B9000000000000000000000000FFFF - FFFFF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800 - 000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800 - 000FF800000FF800000F9800000FC000000FC000000FC000000FE000000F0000 - 000F0000000FE000000FE000001FC000003FC000007F980000FFFCFFFFFF2800 - 0000200000004000000001000800000000000004000000000000000000000001 - 00000001000000000000694731007C5D49007E604C0081635000826451008567 - 540085685500886B5900896D5B008A6E5D008B705F008E715F008B7260008C72 - 61008E74640084766C00957A6900977D6D00887B72009A8171009D8272009C84 - 76009D8778009F897B00A28A7900A08B7D00A18C7E00E1B06E00E1B67D003E7A - 970073A0A5007AA2B70074AFBD007BB2BB003CAACE0028A5DB0020ADDF000D9A - E500209EE3000DA6E2001AA4EF0000A6FF000CABFE0009ACFE0010A4F10015AC - FA0000B5FB0000B0FD000CB6FC0000BFF90000BAFD0004BAFD0009BBFB0013B6 - F40015BFFA001CBDFB0026B7FD00589EC50040A4CD0040ABCC0050A2C7005DAE - C00060A3C20062A4C60060B7CB006AB0CD007BB6C80077BAC80061BADD0044AD - E50000C3F80007C6FB0000CAF80000CFFB0000D4F90026C8FA0026CDF8002BCC - F90039C4FB0039C2FC0039CAFA003FCFFB0024D6F80030D2F80039D5F80000F8 - F8001FF8F8002CF6F8003EF4F8005AC6DC0070CDDF0052C0E40054C9E3004DCE - FA005FC7FF004FD2FB004DD9F8005FD9FB006ED3E70063CDFE0060D1FB0060D8 - F90060DDF80046F8F90056F0F8005FFAFA0073E3F80073E4F90073EEF80060F1 - F800958A84009A918C0081999500A68F8200AD968500A3968C00AE988900AD9A - 8D00B19A8B00AF9C9000B09E9200B59F9200B7A29300B2A19600B5A19400B7A4 - 9700BDA79700B4A39800B1A59D00B4A79F00BAA69800BCA79900B4A89F00BCA8 - 9900BAA89C00BDAA9D00BEAC9E0083ADBD00B5A9A100BDABA000BEADA100BFAF - A500A0BABE00C0AB9E00C1AC9E00C6AE9F00E2B98100E4BA8300E4BB8400E5BC - 8500E1BD8E00E3BF9000C0ADA000C2B0A300C2B1A500C4B2A600C1B2A800C3B5 - AB00C8B4A800CCB9AD00CEBCB100D0BEB200D1BFB400E4C19300E5C29400E6C4 - 9600E8C69900D0C9A300CFC1B800D2C1B600D3C3B800D5C4B900D6C6BC00D8C6 - BC00D6C8BE00DAC9BF00ECD3B000EDD4B200EFD6B500E7D1B800E7D3BD00F0D8 - B6008CB7C40080BEC70097C3C70099C3C900ABD7CF00AFD9DD0086E3F90086E7 - F90086ECF8009EE5FB0090E8F900ACEDFC00BCEAFD00BCF1FB00BFF1FD00D7C9 - C000D9CAC100DCCBC200DACCC200DDCCC300DACCC400DDCEC400DED0C600DED1 - C900DED3CC00DFD4CD00E1D1C900E2D5CD00F0DCC200E3D8D200E5D9D200E2DA - D500E6DBD400E5DCD500E8DDD600E6DDD800E9DFD900E6E0DB00EAE0DA00EAE2 - DD00ECE3DE00EBE4DE00ECE4DE00F3E7D900C6E1EF00C9EFFD00D7F6FD00DFF3 - FF00DFFEFE00EBE7E300EDE6E100EFE7E400EEE8E400F0EAE600F2EDE900F2EE - EC00F4EFEC00F5F0EE00F9F4ED00E7FAFD00EBF8FF00F6F2F000F7F4F100F8F4 - F200F9F7F500FAF8F600FBF9F900FCFBFA00FCFCFB00FEFEFE00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000007D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D - 0D0D0000000000000000009C9C19191919191919191919191919191919191919 - 1903000000000000000000ABDECBCBC7C7AFABABABABAAA3A2A2A0A0A0A0A0A0 - 8607000000000000000000ABECEAE9DEDEDEDED7D5D2D2D2CBCBCBCBB0CBB0CB - 9007000000000000000000ABEDECEAE9DEDEDBD7D7D5D2D2D2CDCDCBB0B0B0B0 - 9007000000000000000000AFEDE9A9CFD2CFD2CDCBCBCBB0B0ABACA3A3A3A3B0 - 9007000000000000000000AFF0D5017783838386868686869099909999907BB0 - 9007000000000000000000B0F4D501A0B0CBD2D5DEECEDF7FAFAFAFAFAF77BAA - 9007000000000000000000CBF4DC01A0B0B0B0D2D5DBEAEDF7FAFAFAFAF47BB0 - 9007000000000000000000CBF8DC010404070604090909090D0D110D110D02A3 - 9007000000000000000000CBFAED9E9E9E9C999E8C8C8C868683837E7D7D7ACB - 9007000000000000000000CBFAF1A7A7A6A6A6A69898989898B5DBDBD5D5D2D2 - 9907000000000000000000CDFAF796969696961D961D931D1DB4DEDBD7D5D5D2 - 9C07000000000000000000CFFAFAFAFAF8F7F0F0EDEDEDECE9E9DEDEDED7D5D5 - 9907000000000000000000CDFAFAEAF0EDEDECEAEAE9DEDEDBDCD5D5D5D5D2D5 - 9C07000000000000000000D2FAEC01737D7D7B7D7D7B7D7B7D7B7B7B7D7B7DD2 - 9907000000000000000000CFFAEC019EABB0CBD2D5DCDEECEDF4F4F4F4EA7BD2 - 9C07000000000000000000B9524601A0B0B0CBB5D5DEEAEDF7FAFAFAFAF47DD5 - 9C070000000000213F0000B83226010C3F5C1F111214141616191B1B1B1807D2 - 9C07000000000000253D8A5B322D711E2860BA7E7E7A7E797A797979767676D5 - 9E0700000000000041375E662F2B65314EBBB6B6B6B6B4B4B1E2F4EDEDEDECEA - 9C070000000000008F5D66663232394EC1A81C1C1C1C1C1C1CD3F7F4EDDED7D5 - 9C0700000000000000B7BE6E5758BEBDE4E6E6F3FAFAFAFAFAFAF7F4D5928675 - 7304000000002A2A2A2A4A6AFAE7562F2A2A2A5FFAFAFAFAFAFAF8D577010101 - 0101000000004747472F4A59C5E7564A32474766FAFAFAFAFAFAFADCA0D2CFB0 - A20C00000000000000436C6958686D6BC2C5C5E7FAFAFAFAFAFAFADEAADEDBCB - 1470000000000000004551534A4A5250C0E7FAFAFAFAFAFAFAFAFADEAAD7B514 - 700000000000000042384C54472B613550C3FAFAFAFAFAFAFAFAFADEA1B0196F - 000000000000000024234463322EBC5A3664E3ECE9E9E9E9E9E9E9CF90731300 - 000000000000003A3C00002232298B8B3E3B207E8B7E8B7E827E817E74100000 - 0000000000000000000000003227000000000000000000000000000000000000 - 000000000000FFFFFFFFF800000FF800000FF800000FF800000FF800000FF800 - 000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800 - 000FF800000FF800000FF800000FF800000F9800000FC000000FC000000FC000 - 000FE000000F0000000F0000000FE000000FE000001FC000003FC000007F9800 - 00FFFCFFFFFF2800000020000000400000000100200000000000801000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000007067 - 5F70AA9382E570513CE3735540E3735540E3735540E3735540E3735540E37355 - 40E3735540E3735540E3735540E3735540E3735540E3735540E3735540E37355 - 40E3735540E3735540E3735540E3735540E3735540E3735540E372533EE5BAAB - A070000000000000000000000000000000000000000000000000000000005E54 - 4C7FCAB7ABFFC5B5AAFFA18877FFA28A78FFA28A79FFA28A79FFA28A79FFA28A - 79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A - 79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA58D7CFF7A5B46FFB2A1 - 967F000000000000000000000000000000000000000000000000000000006055 - 4D7ED7C6BBFFEDE4E0FFD9CCC4FFD9CCC4FFD9CBC3FFD8CAC1FFD7C9BFFFD6C7 - BDFFD5C6BBFFD4C4BAFFD3C3B8FFD2C1B7FFD1C0B5FFD0BEB3FFCFBDB2FFCEBC - B0FFCEBBAFFFCEBBAFFFCEBBAFFFCEBBAFFFCEBCB0FFBEAA9CFF82644FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006056 - 4D7ED7C8BCFFF2EBE8FFEFE9E5FFEEE7E2FFECE5E0FFEBE2DEFFEAE0DBFFE9DE - D8FFE7DBD4FFE5D9D1FFE3D7CFFFE2D4CCFFE1D2C9FFDFD0C7FFDDCDC4FFDCCB - C2FFDBC9BFFFDBC9BFFFDBC9BFFFDBC9BFFFDCCAC1FFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006155 - 4E7ED8C9BDFFF3EDE9FFF1EAE6FFF0E9E6FFEEE6E1FFECE4DFFFEBE2DDFFEAE0 - DAFFE9DED7FFE7DBD4FFE5D9D1FFE3D7CFFFE2D4CCFFE1D2C9FFDFD0C7FFDDCD - C4FFDCCBC2FFDBC9BFFFDBC9BFFFDBC9BFFFDCCAC0FFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006157 - 4E7ED9C9BFFFF4EFEDFFEFE8E3FFD0C2B9FFDFD5CEFFE0D5CEFFE0D4CCFFDED3 - CBFFDDD1C8FFDCCFC6FFDACCC4FFD9CBC1FFD8C9BFFFD7C7BDFFD6C5BBFFD5C4 - B9FFD3C2B7FFD2C0B5FFD2BFB4FFD2BFB4FFDAC8BEFFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006256 - 4F7EDACCC0FFF5F2EFFFE5DDD9FF5C3821FFB0998AFFB8A394FFB8A394FFB9A3 - 94FFB8A495FFB9A597FFB9A698FFBAA698FFBBA799FFBBA89AFFBBA89BFFBCA8 - 9BFFBCA89BFFBCA89BFFBBA89AFFB49E8FFFD8C6BBFFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006256 - 4F7EDBCBC1FFF8F4F3FFE7E0DBFF5F3C24FFD0BDB2FFDCCBC1FFDDCCC3FFE2D2 - CBFFE7DBD4FFEDE2DEFFF0E8E6FFF5F0EDFFF9F7F4FFFDFDFDFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFAF8F7FFB39D8DFFD8C6BBFFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006256 - 4F7EDCCEC3FFFAF6F5FFE9E2DDFF5F3C24FFD2BFB5FFDFCDC4FFDECCC3FFE0CE - C6FFE4D4CDFFE9DDD6FFEFE4E0FFF1EAE8FFF7F1EFFFFBF8F6FFFFFEFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFCFBFAFFB5A090FFD9C7BEFFC1AD9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006257 - 4F7EDDCFC4FFFCF9F9FFE9E4E0FF5F3A23FF7C5D49FF7F5F4CFF7E5F4CFF7E60 - 4DFF7F614DFF816350FF826552FF836654FF846856FF856A57FF866B59FF876C - 5BFF876D5BFF876D5BFF866B59FF72523DFFD5C3B9FFC1AFA1FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006357 - 507EDECFC6FFFCFCFBFFF4F1F0FFC3B6AEFFC3B5ADFFC1B4ACFFC0B3AAFFBFB1 - A9FFBEB0A6FFBDAEA5FFBDACA3FFBCABA2FFBBAAA0FFBAA99FFFB8A69AFFB8A4 - 98FFB6A396FFB5A194FFB49F93FFB39D90FFDCCDC4FFC2AEA1FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006357 - 507EDFD2C7FFFEFEFDFFF9F5EFFFE8C696FFE9C799FFE8C697FFE7C596FFE7C4 - 95FFE6C394FFE5C293FFE4C091FFE4C090FFE3BF8FFFE2BD8CFFE9D5BFFFEBE1 - DCFFEADFD8FFE7DCD5FFE5DAD3FFE4D8D0FFE3D4CCFFC2AFA2FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006458 - 517EE0D3C8FFFFFFFFFFFAF5EFFFE3B77CFFE4B97FFFE2B87EFFE3B77DFFE2B7 - 7CFFE2B67BFFE1B57AFFE1B479FFE0B478FFE0B377FFDFB174FFE6D0B7FFEBE1 - DCFFE8DFD9FFE8DDD6FFE6D9D2FFE3D8D1FFE4D7CFFFC3AFA2FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006458 - 517EE1D2C9FFFFFFFFFFFEFEFDFFFEFFFFFFFCFDFEFFFBFBFBFFF9F7F8FFF8F5 - F6FFF7F3F2FFF5F1F0FFF4EFEEFFF1EDEBFFF0EBE9FFEEE9E6FFEDE6E2FFECE3 - DEFFEBE1DBFFE9DFD9FFE8DDD6FFE6DAD3FFE5D9D2FFC3B0A3FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006459 - 517EE1D4CAFFFFFFFFFFFDFDFCFFEEEBE8FFF5F2F0FFF4F0EFFFF3EFECFFF2ED - EAFFF1EBE8FFEEE9E5FFEFE7E3FFECE5E1FFEAE4DEFFEAE1DCFFE8E0DAFFE7DE - D8FFE6DDD6FFE5DBD4FFE4D8D1FFE2D6CEFFE6DBD4FFC3B1A4FF81634EFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006559 - 527EE2D4CAFFFFFFFFFFF0ECEAFF5B361EFFAB9383FFB39D8EFFB39D8DFFB39D - 8DFFB29D8DFFB29C8DFFB29C8CFFB29C8CFFB29C8CFFB29C8CFFB29C8CFFB29C - 8CFFB29C8CFFB29C8CFFB29C8DFFB39D8EFFE3D8D0FFC4B1A4FF81634EFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006559 - 527EE5D4CAFFFFFFFFFFF7F0EBFF5F3B24FFCCB8ADFFD7C5BAFFD9C7BDFFDCCC - C3FFE1D4CCFFE5DAD4FFE8E0DBFFEDE5E1FFF1EBE9FFF5F2EFFFF7F5F3FFF8F6 - F4FFF8F5F4FFF8F6F4FFF1EEEAFFB29C8DFFE6DAD3FFC4B2A5FF81634EFFB2A1 - 967E00000000000000000000000000000000000000000000000000000000685A - 527E9AC6C9FF35CFFEFF3DAEEBFF663E24FFD2BFB4FFE0CBBFFFE0C9BDFFE1CD - C4FFE4D5CDFFE9DED7FFEEE5E0FFF2EBE8FFF6F2F0FFFCF8F8FFFFFFFEFFFFFF - FFFFFFFFFFFFFFFFFFFFFCFAF9FFB49E8FFFE7DED7FFC5B3A6FF81634EFFB2A1 - 967E00000000000000000000000000000000007792910072A7A3001E33366957 - 4C7C86C1C8FF00BFFBFF079AEBFF6A3E23FF926D57FF5FA3C8FF4AC1E8FF6C9C - A2FF917260FF927767FF947A69FF957C6CFF977E6FFF998171FF9A8374FF9B85 - 76FF9C8678FF9C8678FF998274FF7D5E49FFE3D9D4FFC5B3A7FF81634EFFB2A1 - 967E00000000000000000000000000000000005A6F7000A9E5E40075AEAE5C90 - A5BD75D0E0FF00BFFAFF0CA3F4FF8A9A91FF3C7492FF03A4E4FF4AD5FFFF98C4 - CBFFB3A196FFB1A197FFB0A096FFB09F95FFAF9D92FFAF9C91FFAD9A8EFFAC99 - 8CFFAB988AFFAB9789FFAA9688FFA99386FFE8E0DAFFC5B4A7FF81634EFFB2A1 - 967E00000000000000000000000000000000000000002DA5BFC110C2FFFF4DD0 - FDFF64DBF9FF00B3FAFF09A8FEFF68D7FFFF04B5FFFF24CCFBFFAFD8CEFFF7DA - B8FFF3DBBBFFF3DBBAFFF2D9B9FFF1D8B7FFF0D7B4FFEED5B2FFF6EADDFFF9F6 - F4FFF7F3F1FFF5F1EEFFF5EFECFFF4EDEAFFF1EBE7FFC6B4A8FF81634EFFB2A1 - 967E00000000000000000000000000000000000000005F8A909142C7E4E960DE - F8FF64D7FAFF00B6FDFF00B8FDFF21B2FDFF1ECCF7FF93EBFCFFD2C69BFFE1AB - 63FFDFAC66FFDFAC66FFDFAC66FFDFAC66FFDFAC66FFDEA961FFEFDBC0FFF8F6 - F5FFF6F2F0FFF3EDEBFFECE2DCFFE9DFD9FFE5DBD6FFC2B1A4FF81634FFFB2A1 - 967E000000000000000000000000000E171A000E171A00040B145994A4A990EB - FCFF61F1F7FF13FAF7FF23F9F7FF93EDF7FF8CE5F8FFD5F2FDFFE9F8FFFFE7F8 - FFFFF0FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFDFEFFFFFAFAF9FFF9F7 - F5FFF7F2F0FFE8DFD8FFC7AE9FFFBEA998FFAF9888FFB09A8AFF7F604DFFB2A1 - 967E00000000000000000000000000AAFFFF00AAFFFF00AAFFFF00A4FFFF00CD - FAFF5DFCF9FFFFFFFFFFEEFEFEFF00FBF7FF00AAFEFF00A1FFFF00A1FFFF00A0 - FFFF56C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFBFFFCFBFAFFFBFA - F8FFE6DDD6FFAA9180FF5D3922FF603D26FF613E27FF613E28FF634029FFB4A3 - 987E00000000000000000000000000CAFFFF00CAFFFF00CBFFFF00B0FFFF00CD - FBFF38F5F7FFC3EFFAFFF0FFFEFF00FAF7FF00C8F7FF00C2F7FF00C2F7FF00C1 - F7FF57D7FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFDFDFCFFFCFC - FBFFE7DED8FFCCB9ACFFE6DBD5FFE2D7D0FFDCCFC5FFD7C5BBFF8E705DFFB4A2 - 9680000000000000000000000000002E383C002E383C00252F364C99B0B57DE8 - FBFF59F1F7FF25F7F7FF41FAF8FF7CEEF7FF77E4F7FFB5EFFCFFC6F2FDFFC3F2 - FDFFD9F6FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEFFFEFE - FEFFE9E1DAFFCEBCAFFFF1E9E3FFEADFD8FFE4D5CCFF9D816FFF3A291F868985 - 831C00000000000000000000000000000000000000004E7073774AB0DADC37C9 - FBFF22D5F7FF00D3F9FF02C3FBFF37D5F7FF34BEFCFFA2E6FAFFECFBFDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF - FFFFEAE2DCFFCDBBADFFEADFD8FFE3D5CBFF9F8271FF3E2D2386050100200000 - 000000000000000000000000000000000000000000003E9CC4C219C0FFFF23C9 - FCFF30D3F8FF00BEF8FF06A8FEFF4FDCF8FF00B8FCFF32C2FBFFC0EBFCFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFEAE3DEFFCDB9ABFFDDCEC4FFA58979FF3E2C1F8F0905041B000000000000 - 000000000000000000000000000000000000003451510099DDDB0091C0C35DAD - BCCF76D7E9FF00BEF9FF10A9FBFFBDDEDEFF5AC8DDFF0AB5F7FF62CEFFFFCBE4 - F1FFF1E7E0FFEFE7E1FFEEE6E1FFEEE6E1FFEEE6E0FFEDE6E0FFEDE5E0FFEEE6 - E1FFE1D4CCFFC5AE9FFFA68D7FF53E2718A10402000E00000000000000000000 - 0000000000000000000000000000000000000075B7AF0099C7C500323E425442 - 3B5C6BA8B1DA00C1FCFF0EA1F3F8A98E80C0AB9081C12698B1C10088C4C14C85 - A3C1A18D80C19E8D81C19E8B81C19D8C80C19B8C7FC19B8A7FC19C897FC19A89 - 7EC19B8B7EC1897769C2432B1BAC000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000045565A00C5FFFF0094E6E2000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFFFFFFFF0000007F0000007F0000007F000 - 0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 - 0007F0000007F0000007F0000007F0000007F0000007F0000007800000078000 - 0007C0000007C000000700000007000000070000000700000007C000000FC000 - 001F8000003F800000FFF8FFFFFF} - Width = 450 - Left = 72 - Top = 16 - end -end diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvPedProvUtils.pas b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvPedProvUtils.pas deleted file mode 100644 index fc04178..0000000 --- a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvPedProvUtils.pas +++ /dev/null @@ -1,234 +0,0 @@ -unit uGenerarFacturasProvPedProvUtils; - -interface - -uses - Windows, SysUtils, Classes, uBizPedidosProveedor, pngimage, JSDialog; - -type - TdmGenerarFacturasProv = class(TDataModule) - JsListaFacturasGeneradas: TJSDialog; - end; - - function GenerarFacturaProv(const IDPedido : Integer) : Boolean; overload; - function GenerarFacturaProv(APedidos : IBizPedidoProveedor) : Boolean; overload; - function GenerarFacturaProv : Boolean; overload; - -implementation - -{$R *.dfm} - -uses - uDialogUtils, - uBizDetallesPedidoProveedor, - uPedidosProveedorController, uDetallesPedidoProveedorController, - uFacturasProveedorController, uBizFacturasProveedor, uBizDetallesFacturaProveedor; - -// , -// , uProveedoresController, -// , uControllerDetallesBase, - - -// , uBizContactos, schPedidosClienteClient_Intf, -// schPedidosProveedorClient_Intf; - -var - dmGenerarFacturasProv: TdmGenerarFacturasProv; - APedidosProveedorController : IPedidosProveedorController; - ADetallesPedidosProveedorController : IDetallesPedidoProveedorController; - AFacturasProveedorController : IFacturasProveedorController; -// AProveedoresController : IProveedoresController; - -{ Métodos auxiliares } -{procedure CopiarPedidoAPedido(APedido: IBizPedidoCliente; - APedido : IBizFacturaProveedor); -begin - if not Assigned(APedido) then - raise Exception.Create ('Albarán no asignado (CopiarPedidoAPedido)'); - - if not Assigned(APedido) then - raise Exception.Create ('Pedido no asignado (CopiarPedidoAPedido)'); - - if not APedido.DataTable.Active then - APedido.DataTable.Active := True; - - // El albarán tiene que venir ya abierto y posicionado donde hay que copiar - APedido.ID_CLIENTE := APedido.ID_CLIENTE; - APedido.ID_PEDIDO := APedido.ID; - APedido.CALLE := APedido.CALLE; - APedido.CODIGO_POSTAL := APedido.CODIGO_POSTAL; - APedido.POBLACION := APedido.POBLACION; - APedido.PROVINCIA := APedido.PROVINCIA; - APedido.PERSONA_CONTACTO := APedido.PERSONA_CONTACTO; - APedido.TELEFONO := APedido.TELEFONO; - APedido.IMPORTE_NETO := APedido.IMPORTE_NETO; - APedido.IMPORTE_PORTE := APedido.IMPORTE_PORTE; - APedido.DESCUENTO := APedido.DESCUENTO; - APedido.IMPORTE_DESCUENTO := APedido.IMPORTE_DESCUENTO; - APedido.BASE_IMPONIBLE := APedido.BASE_IMPONIBLE; - APedido.IVA := APedido.IVA; - APedido.IMPORTE_IVA := APedido.IMPORTE_IVA; - APedido.IMPORTE_TOTAL := APedido.IMPORTE_TOTAL; - APedido.DataTable.FieldByName(fld_PedidosClienteOBSERVACIONES).AsVariant := APedido.DataTable.FieldByName(fld_PedidosClienteOBSERVACIONES).AsVariant; - APedido.ID_FORMA_PAGO := APedido.ID_FORMA_PAGO; -end; - -procedure CopiarArticulosPendAPedido( - APedido: IBizPedidoCliente; - APedido: IBizFacturaProveedor; - AArticulosPendientes: IBizPedidoClienteArticulosPend); -var - i : integer; - ADetalles : IBizDetallesFacturaProveedor; - ADetallesController : IDetallesFacturaProveedorController; -begin - if not Assigned(APedido) then - raise Exception.Create ('Albarán no asignado (CopiarArticulosPendAPedido)'); - - if not Assigned(APedido) then - raise Exception.Create ('Pedido no asignado (CopiarArticulosPendAPedido)'); - - if not Assigned(AArticulosPendientes) then - raise Exception.Create ('Artículos pendientes no asignado (CopiarArticulosPendAPedido)'); - - if not AArticulosPendientes.DataTable.Active then - AArticulosPendientes.DataTable.Active := True; - - // El albarán tiene que venir ya abierto y posicionado donde hay que copiar - - ADetalles := APedido.Detalles; - ADetallesController := TDetallesFacturaProveedorController.Create; - try - //OJO IMPORTANTE - //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para - //obligarle siempre a recalcular los detalles una sola vez - ADetallesController.BeginUpdate(ADetalles); - - AArticulosPendientes.DataTable.First; - for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do - begin - APedido.Detalles.First; - if (APedido.Detalles.Locate('ID_ARTICULO', AArticulosPendientes.ID_ARTICULO, [])) then - if (AArticulosPendientes.CANTIDAD_PENDIENTE > 0) then - begin - ADetallesController.Add(ADetalles, TIPO_DETALLE_CONCEPTO); - ADetalles.Edit; - ADetalles.REFERENCIA := APedido.Detalles.REFERENCIA; - ADetalles.ID_ARTICULO := APedido.Detalles.ID_ARTICULO; - ADetalles.CONCEPTO := APedido.Detalles.CONCEPTO; - ADetalles.CANTIDAD := AArticulosPendientes.CANTIDAD_PENDIENTE; - ADetalles.IMPORTE_UNIDAD := APedido.Detalles.IMPORTE_UNIDAD; - ADetalles.IMPORTE_TOTAL := APedido.Detalles.IMPORTE_TOTAL; - ADetalles.DESCUENTO := APedido.Detalles.DESCUENTO; - ADetalles.IMPORTE_PORTE := APedido.Detalles.IMPORTE_PORTE; - ADetalles.VISIBLE := APedido.Detalles.VISIBLE; - ADetalles.REFERENCIA_PROVEEDOR := APedido.Detalles.REFERENCIA_PROVEEDOR; - ADetalles.Post; - AArticulosPendientes.Next; - end; - end; - finally - ADetallesController.EndUpdate(ADetalles); - ADetallesController := NIL; - end; -end; } - -procedure Inicializar; -begin - dmGenerarFacturasProv := TdmGenerarFacturasProv.Create(nil); - APedidosProveedorController := TPedidosProveedorController.Create; - ADetallesPedidosProveedorController := TDetallesPedidoProveedorController.Create; - AFacturasProveedorController := TFacturasProveedorController.Create; -// AProveedoresController := TProveedoresController.Create; -end; - -procedure Finalizar; -begin - FreeAndNIL(dmGenerarFacturasProv); - APedidosProveedorController := nil; - ADetallesPedidosProveedorController := nil; - AFacturasProveedorController := nil; -// AProveedoresController := nil; -end; - - -function GenerarFacturaProv(const IDPedido : Integer) : Boolean; overload; -var - APedido : IBizPedidoProveedor; -begin - Result := False; - if not Assigned(APedidosProveedorController) then - Inicializar; - - APedido := APedidosProveedorController.Buscar(IDPedido); - Result := GenerarFacturaProv(APedido); - - if Assigned(APedidosProveedorController) then - Finalizar; -end; - -function GenerarFacturaProv(APedidos : IBizPedidoProveedor) : Boolean; overload; -var - ARespuesta : Integer; - AFacturasNuevas : IBizFacturaProveedor; -// AArticulos: IBizPedidoClienteArticulosPend; - i: Integer; -begin - Result := False; - if not Assigned(APedidosProveedorController) then - Inicializar; - - if not Assigned(APedidos) then - raise Exception.Create('Albarán de proveedor no asignado (GenerarFacturaProv)'); - - if not APedidos.DataTable.Active then - APedidos.DataTable.Active := True; - - try - AFacturasNuevas := AFacturasProveedorController.Nuevo(False); - if AFacturasProveedorController.Anadir(AFacturasNuevas, APedidos.ID) then - begin - if AFacturasNuevas.DataTable.RecordCount = 1 then - AFacturasProveedorController.Ver(AFacturasNuevas) - else begin - with dmGenerarFacturasProv.JsListaFacturasGeneradas.Content do - begin - Clear; - AFacturasNuevas.DataTable.Last; - for i := 0 to AFacturasNuevas.DataTable.RecordCount - 1 do - begin - if Length(AFacturasNuevas.REFERENCIA) > 0 then - Add(AFacturasNuevas.REFERENCIA + ': ' + AFacturasNuevas.NOMBRE); - AFacturasNuevas.DataTable.Prior; - end; - end; - dmGenerarFacturasProv.JsListaFacturasGeneradas.Execute; - end; -// actRefrescar.Execute; - end; - finally - AFacturasNuevas := NIL; - end; -end; - -function GenerarFacturaProv : Boolean; overload; -var - APedidos : IBizPedidoProveedor; -begin -{ - Result := False; - if not Assigned(APedidosProveedorController) then - Inicializar; - - APedidos := APedidosProveedorController.ElegirPedidos(APedidosProveedorController.BuscarSinFacturar, - 'Elija el albarán o Pedidos de proveedor que desea utilizar para dar de alta la factura.' - + #10#13 + 'Si elige Pedidos de proveedores diferentes se dará de alta una factura por cada uno de ellos.' , True); - - Result := GenerarFacturaProv(APedidos); - - if Assigned(APedidosProveedorController) then - Finalizar; -} -end; - -end. diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvUtils.dfm b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvUtils.dfm deleted file mode 100644 index 182262d..0000000 --- a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvUtils.dfm +++ /dev/null @@ -1,315 +0,0 @@ -object dmGenerarFacturasProv: TdmGenerarFacturasProv - OldCreateOrder = False - Height = 176 - Width = 254 - object JsListaFacturasGeneradas: TJSDialog - Glyph.Data = { - 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001C00 - 00001C0806000000720DDF940000000970485973000017120000171201679FD2 - 520000000467414D410000B18E7CFB5193000003104944415478DAAD96FB4B14 - 5114C7CFE463DC1E606444BFF54424D3DC55CA52B1CCD7165A219905054182FD - 1452FD5810FD100406610A669A998FC4F5BDB6266265DAB60F5DD15E58FE03B2 - 3F99D29ABBA7B9779C71C61D9D6177CFCE70CFDCB97B3EF7DCF3BD33C38082FD - B502B2B300CC656020048688A24F036233A0671F40D43160BA87BF62AEEE1010 - 60D7AE293AD8B835815E9B625C80DC8F1E88D4A7C1E8C1FB8F9FD6C3C44035B3 - 21500A65F6D700FE2EA580A5EC551F4A50359316B31D76EFDC0EE5F72A645045 - A067AE0623074B8140891108F1057064CC0D556053DF173812B707E6DCF332A8 - 225080D201DB4AF99BF335B4D502F371415BCC364833C4C29F458F0C2A031281 - 081734AB0B3C88403C1E6E3E2E7960F6A8FFD27A7D3EF07A11DA2C76C84A8D87 - A57FCB32E8B8A54A4C8C21B59365C9015996EF2240B6634DF435B51460A46D1F - 70C093AA46BF09C980C12CA914E6F371ADD707EF1DB3B0B0B8006EB79B8EA96B - EA5106121851245129118FD8BFA2DC5C53C6BAF5EBBBBA97C2D64EC064195B1F - 286C76E956A0EA5C51AEB4764A9929F5750D5A9581D2274B9B651C0BA2F514A8 - 6F28E36B70AD9A4253EF97A9AA55B0CEBA87D03B645B3F43C1DE589C58186D10 - 81150FCAC57B11E161B04517099BB953C78643141B01BA28EEE4DAB0B04DE2B8 - CA460B9C399902E661BB3AB0F5AD038BF30CD4D7E7DD14815A61023027DD00EF - 469C1A80FD1C307F1578FD4A81E665945AD68924181A9D5007B6F4DBF1527E32 - F5C9D3632351F8F549AEE916B14EAA039BCD362C31A6040D23E7887D4A03B0CF - 86C5C6641A24BB7646D3F2D51A77F8C1BCDCFFC79CD3EAC0D7BD56AE86294165 - 4660CB5C6B737DD3062CCA31D00069E76E05241862CF1EDD05E7D40F756063CF - 673C7F5A4F679A59541EF03E4C8C3B0893DF67D481AFBAC7B0F05412CD30EBE2 - ED80F7617CEC0198FEF94B1BF06C6622AD4B4EC99D80F7A1666043D7281A3312 - FD84C20B8417C3AA789405239826E0CBCE4F98979E10344C33B0BE630473D312 - 82866906D6993E62F6F1C3F45D160A5305BE68FF8095CF5B4302134CFE1185EA - 1FB8A1B4FF4FE32FF6FADB8B5E0000000049454E44AE426082} - Instruction.Text = 'Se ha generado el albar'#195#161'n...' - Instruction.Glyph.Data = { - 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001C00 - 00001C0806000000720DDF940000000970485973000017120000171201679FD2 - 520000000467414D410000B18E7CFB5193000003104944415478DAAD96FB4B14 - 5114C7CFE463DC1E606444BFF54424D3DC55CA52B1CCD7165A219905054182FD - 1452FD5810FD100406610A669A998FC4F5BDB6266265DAB60F5DD15E58FE03B2 - 3F99D29ABBA7B9779C71C61D9D6177CFCE70CFDCB97B3EF7DCF3BD33C38082FD - B502B2B300CC656020048688A24F036233A0671F40D43160BA87BF62AEEE1010 - 60D7AE293AD8B835815E9B625C80DC8F1E88D4A7C1E8C1FB8F9FD6C3C44035B3 - 21500A65F6D700FE2EA580A5EC551F4A50359316B31D76EFDC0EE5F72A645045 - A067AE0623074B8140891108F1057064CC0D556053DF173812B707E6DCF332A8 - 225080D201DB4AF99BF335B4D502F371415BCC364833C4C29F458F0C2A031281 - 081734AB0B3C88403C1E6E3E2E7960F6A8FFD27A7D3EF07A11DA2C76C84A8D87 - A57FCB32E8B8A54A4C8C21B59365C9015996EF2240B6634DF435B51460A46D1F - 70C093AA46BF09C980C12CA914E6F371ADD707EF1DB3B0B0B8006EB79B8EA96B - EA5106121851245129118FD8BFA2DC5C53C6BAF5EBBBBA97C2D64EC064195B1F - 286C76E956A0EA5C51AEB4764A9929F5750D5A9581D2274B9B651C0BA2F514A8 - 6F28E36B70AD9A4253EF97A9AA55B0CEBA87D03B645B3F43C1DE589C58186D10 - 81150FCAC57B11E161B04517099BB953C78643141B01BA28EEE4DAB0B04DE2B8 - CA460B9C399902E661BB3AB0F5AD038BF30CD4D7E7DD14815A61023027DD00EF - 469C1A80FD1C307F1578FD4A81E665945AD68924181A9D5007B6F4DBF1527E32 - F5C9D3632351F8F549AEE916B14EAA039BCD362C31A6040D23E7887D4A03B0CF - 86C5C6641A24BB7646D3F2D51A77F8C1BCDCFFC79CD3EAC0D7BD56AE86294165 - 4660CB5C6B737DD3062CCA31D00069E76E05241862CF1EDD05E7D40F756063CF - 673C7F5A4F679A59541EF03E4C8C3B0893DF67D481AFBAC7B0F05412CD30EBE2 - ED80F7617CEC0198FEF94B1BF06C6622AD4B4EC99D80F7A1666043D7281A3312 - FD84C20B8417C3AA789405239826E0CBCE4F98979E10344C33B0BE630473D312 - 82866906D6993E62F6F1C3F45D160A5305BE68FF8095CF5B4302134CFE1185EA - 1FB8A1B4FF4FE32FF6FADB8B5E0000000049454E44AE426082} - Instruction.Icon = tdiCustom - CustomButtons = < - item - Caption = 'Ver el albar'#225'n' - Value = 100 - end - item - Caption = 'Continuar' - Value = 200 - Cancel = True - end> - ButtonBar.Buttons = [] - ButtonBar.Cancel = cbOK - ButtonBar.UseCancel = False - MainIcon = tdiCustom - Title = 'FactuGES' - Position = dpMainFormCenter - Icon.Data = { - 0000010003002020100001000400E8020000360000002020000001000800A808 - 00001E0300002020000001002000A8100000C60B000028000000200000004000 - 0000010004000000000000020000000000000000000000000000000000000000 - 000000008000008000000080800080000000800080008080000080808000C0C0 - C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 - 0000000000000000000000000000000008777777777777777777777700000000 - 0877767777677776777767760000000008F88888888888888888888700000000 - 08F8FF8F8F888888888888860000000008FF8F8F88F8F8888888888C00000000 - 08F88888F8888888888888860000000008F8688878E8888E88E8788700000000 - 08F8688888F8F8FFFFFF88760000000008FF4888888F8FFFFFFF788700000000 - 08F8676767677677677658E50000000008FF8888888887878787888700000000 - 08FF8887887E8888888888860000000008FFE8E8E788C8E8FF8F8F8600000000 - 08FFF8F8F8F8FF8F88F8F8870000000008FFFFFF8FF8F8F8F88F888600000000 - 0FF8477878787878788788860000000008FF68888888F8FF8F8F788700000000 - 08B7588888FF8FFFFFFF78860000083008BB47887776777777776F86000000B7 - 8B9B73BB88788787E87878870000008BB8B9BB78888888EFF8F8FF8600000087 - B8BB8B888E8E8E88FFF8F886000000088BBB888FFFFFFFFFF8F877770000B9BB - B8FFBB9B9BFFFFFFF87466460000BBB9BB8FBBBBB8FFFFFFF88F888700000008 - B8BB88888FFFFFFFF88F8F7700000008BBBBBB8FFFFFFFFFFF8887700000007B - B7B98BB8FFFFFFFFF8887700000000B78B9B87B888F88F88F8877000000007B0 - 08BB883B78888788787700000000000000B9000000000000000000000000FFFF - FFFFF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800 - 000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800 - 000FF800000FF800000F9800000FC000000FC000000FC000000FE000000F0000 - 000F0000000FE000000FE000001FC000003FC000007F980000FFFCFFFFFF2800 - 0000200000004000000001000800000000000004000000000000000000000001 - 00000001000000000000694731007C5D49007E604C0081635000826451008567 - 540085685500886B5900896D5B008A6E5D008B705F008E715F008B7260008C72 - 61008E74640084766C00957A6900977D6D00887B72009A8171009D8272009C84 - 76009D8778009F897B00A28A7900A08B7D00A18C7E00E1B06E00E1B67D003E7A - 970073A0A5007AA2B70074AFBD007BB2BB003CAACE0028A5DB0020ADDF000D9A - E500209EE3000DA6E2001AA4EF0000A6FF000CABFE0009ACFE0010A4F10015AC - FA0000B5FB0000B0FD000CB6FC0000BFF90000BAFD0004BAFD0009BBFB0013B6 - F40015BFFA001CBDFB0026B7FD00589EC50040A4CD0040ABCC0050A2C7005DAE - C00060A3C20062A4C60060B7CB006AB0CD007BB6C80077BAC80061BADD0044AD - E50000C3F80007C6FB0000CAF80000CFFB0000D4F90026C8FA0026CDF8002BCC - F90039C4FB0039C2FC0039CAFA003FCFFB0024D6F80030D2F80039D5F80000F8 - F8001FF8F8002CF6F8003EF4F8005AC6DC0070CDDF0052C0E40054C9E3004DCE - FA005FC7FF004FD2FB004DD9F8005FD9FB006ED3E70063CDFE0060D1FB0060D8 - F90060DDF80046F8F90056F0F8005FFAFA0073E3F80073E4F90073EEF80060F1 - F800958A84009A918C0081999500A68F8200AD968500A3968C00AE988900AD9A - 8D00B19A8B00AF9C9000B09E9200B59F9200B7A29300B2A19600B5A19400B7A4 - 9700BDA79700B4A39800B1A59D00B4A79F00BAA69800BCA79900B4A89F00BCA8 - 9900BAA89C00BDAA9D00BEAC9E0083ADBD00B5A9A100BDABA000BEADA100BFAF - A500A0BABE00C0AB9E00C1AC9E00C6AE9F00E2B98100E4BA8300E4BB8400E5BC - 8500E1BD8E00E3BF9000C0ADA000C2B0A300C2B1A500C4B2A600C1B2A800C3B5 - AB00C8B4A800CCB9AD00CEBCB100D0BEB200D1BFB400E4C19300E5C29400E6C4 - 9600E8C69900D0C9A300CFC1B800D2C1B600D3C3B800D5C4B900D6C6BC00D8C6 - BC00D6C8BE00DAC9BF00ECD3B000EDD4B200EFD6B500E7D1B800E7D3BD00F0D8 - B6008CB7C40080BEC70097C3C70099C3C900ABD7CF00AFD9DD0086E3F90086E7 - F90086ECF8009EE5FB0090E8F900ACEDFC00BCEAFD00BCF1FB00BFF1FD00D7C9 - C000D9CAC100DCCBC200DACCC200DDCCC300DACCC400DDCEC400DED0C600DED1 - C900DED3CC00DFD4CD00E1D1C900E2D5CD00F0DCC200E3D8D200E5D9D200E2DA - D500E6DBD400E5DCD500E8DDD600E6DDD800E9DFD900E6E0DB00EAE0DA00EAE2 - DD00ECE3DE00EBE4DE00ECE4DE00F3E7D900C6E1EF00C9EFFD00D7F6FD00DFF3 - FF00DFFEFE00EBE7E300EDE6E100EFE7E400EEE8E400F0EAE600F2EDE900F2EE - EC00F4EFEC00F5F0EE00F9F4ED00E7FAFD00EBF8FF00F6F2F000F7F4F100F8F4 - F200F9F7F500FAF8F600FBF9F900FCFBFA00FCFCFB00FEFEFE00000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000007D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D - 0D0D0000000000000000009C9C19191919191919191919191919191919191919 - 1903000000000000000000ABDECBCBC7C7AFABABABABAAA3A2A2A0A0A0A0A0A0 - 8607000000000000000000ABECEAE9DEDEDEDED7D5D2D2D2CBCBCBCBB0CBB0CB - 9007000000000000000000ABEDECEAE9DEDEDBD7D7D5D2D2D2CDCDCBB0B0B0B0 - 9007000000000000000000AFEDE9A9CFD2CFD2CDCBCBCBB0B0ABACA3A3A3A3B0 - 9007000000000000000000AFF0D5017783838386868686869099909999907BB0 - 9007000000000000000000B0F4D501A0B0CBD2D5DEECEDF7FAFAFAFAFAF77BAA - 9007000000000000000000CBF4DC01A0B0B0B0D2D5DBEAEDF7FAFAFAFAF47BB0 - 9007000000000000000000CBF8DC010404070604090909090D0D110D110D02A3 - 9007000000000000000000CBFAED9E9E9E9C999E8C8C8C868683837E7D7D7ACB - 9007000000000000000000CBFAF1A7A7A6A6A6A69898989898B5DBDBD5D5D2D2 - 9907000000000000000000CDFAF796969696961D961D931D1DB4DEDBD7D5D5D2 - 9C07000000000000000000CFFAFAFAFAF8F7F0F0EDEDEDECE9E9DEDEDED7D5D5 - 9907000000000000000000CDFAFAEAF0EDEDECEAEAE9DEDEDBDCD5D5D5D5D2D5 - 9C07000000000000000000D2FAEC01737D7D7B7D7D7B7D7B7D7B7B7B7D7B7DD2 - 9907000000000000000000CFFAEC019EABB0CBD2D5DCDEECEDF4F4F4F4EA7BD2 - 9C07000000000000000000B9524601A0B0B0CBB5D5DEEAEDF7FAFAFAFAF47DD5 - 9C070000000000213F0000B83226010C3F5C1F111214141616191B1B1B1807D2 - 9C07000000000000253D8A5B322D711E2860BA7E7E7A7E797A797979767676D5 - 9E0700000000000041375E662F2B65314EBBB6B6B6B6B4B4B1E2F4EDEDEDECEA - 9C070000000000008F5D66663232394EC1A81C1C1C1C1C1C1CD3F7F4EDDED7D5 - 9C0700000000000000B7BE6E5758BEBDE4E6E6F3FAFAFAFAFAFAF7F4D5928675 - 7304000000002A2A2A2A4A6AFAE7562F2A2A2A5FFAFAFAFAFAFAF8D577010101 - 0101000000004747472F4A59C5E7564A32474766FAFAFAFAFAFAFADCA0D2CFB0 - A20C00000000000000436C6958686D6BC2C5C5E7FAFAFAFAFAFAFADEAADEDBCB - 1470000000000000004551534A4A5250C0E7FAFAFAFAFAFAFAFAFADEAAD7B514 - 700000000000000042384C54472B613550C3FAFAFAFAFAFAFAFAFADEA1B0196F - 000000000000000024234463322EBC5A3664E3ECE9E9E9E9E9E9E9CF90731300 - 000000000000003A3C00002232298B8B3E3B207E8B7E8B7E827E817E74100000 - 0000000000000000000000003227000000000000000000000000000000000000 - 000000000000FFFFFFFFF800000FF800000FF800000FF800000FF800000FF800 - 000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800 - 000FF800000FF800000FF800000FF800000F9800000FC000000FC000000FC000 - 000FE000000F0000000F0000000FE000000FE000001FC000003FC000007F9800 - 00FFFCFFFFFF2800000020000000400000000100200000000000801000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000007067 - 5F70AA9382E570513CE3735540E3735540E3735540E3735540E3735540E37355 - 40E3735540E3735540E3735540E3735540E3735540E3735540E3735540E37355 - 40E3735540E3735540E3735540E3735540E3735540E3735540E372533EE5BAAB - A070000000000000000000000000000000000000000000000000000000005E54 - 4C7FCAB7ABFFC5B5AAFFA18877FFA28A78FFA28A79FFA28A79FFA28A79FFA28A - 79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A - 79FFA28A79FFA28A79FFA28A79FFA28A79FFA28A79FFA58D7CFF7A5B46FFB2A1 - 967F000000000000000000000000000000000000000000000000000000006055 - 4D7ED7C6BBFFEDE4E0FFD9CCC4FFD9CCC4FFD9CBC3FFD8CAC1FFD7C9BFFFD6C7 - BDFFD5C6BBFFD4C4BAFFD3C3B8FFD2C1B7FFD1C0B5FFD0BEB3FFCFBDB2FFCEBC - B0FFCEBBAFFFCEBBAFFFCEBBAFFFCEBBAFFFCEBCB0FFBEAA9CFF82644FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006056 - 4D7ED7C8BCFFF2EBE8FFEFE9E5FFEEE7E2FFECE5E0FFEBE2DEFFEAE0DBFFE9DE - D8FFE7DBD4FFE5D9D1FFE3D7CFFFE2D4CCFFE1D2C9FFDFD0C7FFDDCDC4FFDCCB - C2FFDBC9BFFFDBC9BFFFDBC9BFFFDBC9BFFFDCCAC1FFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006155 - 4E7ED8C9BDFFF3EDE9FFF1EAE6FFF0E9E6FFEEE6E1FFECE4DFFFEBE2DDFFEAE0 - DAFFE9DED7FFE7DBD4FFE5D9D1FFE3D7CFFFE2D4CCFFE1D2C9FFDFD0C7FFDDCD - C4FFDCCBC2FFDBC9BFFFDBC9BFFFDBC9BFFFDCCAC0FFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006157 - 4E7ED9C9BFFFF4EFEDFFEFE8E3FFD0C2B9FFDFD5CEFFE0D5CEFFE0D4CCFFDED3 - CBFFDDD1C8FFDCCFC6FFDACCC4FFD9CBC1FFD8C9BFFFD7C7BDFFD6C5BBFFD5C4 - B9FFD3C2B7FFD2C0B5FFD2BFB4FFD2BFB4FFDAC8BEFFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006256 - 4F7EDACCC0FFF5F2EFFFE5DDD9FF5C3821FFB0998AFFB8A394FFB8A394FFB9A3 - 94FFB8A495FFB9A597FFB9A698FFBAA698FFBBA799FFBBA89AFFBBA89BFFBCA8 - 9BFFBCA89BFFBCA89BFFBBA89AFFB49E8FFFD8C6BBFFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006256 - 4F7EDBCBC1FFF8F4F3FFE7E0DBFF5F3C24FFD0BDB2FFDCCBC1FFDDCCC3FFE2D2 - CBFFE7DBD4FFEDE2DEFFF0E8E6FFF5F0EDFFF9F7F4FFFDFDFDFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFAF8F7FFB39D8DFFD8C6BBFFC1AC9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006256 - 4F7EDCCEC3FFFAF6F5FFE9E2DDFF5F3C24FFD2BFB5FFDFCDC4FFDECCC3FFE0CE - C6FFE4D4CDFFE9DDD6FFEFE4E0FFF1EAE8FFF7F1EFFFFBF8F6FFFFFEFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFCFBFAFFB5A090FFD9C7BEFFC1AD9FFF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006257 - 4F7EDDCFC4FFFCF9F9FFE9E4E0FF5F3A23FF7C5D49FF7F5F4CFF7E5F4CFF7E60 - 4DFF7F614DFF816350FF826552FF836654FF846856FF856A57FF866B59FF876C - 5BFF876D5BFF876D5BFF866B59FF72523DFFD5C3B9FFC1AFA1FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006357 - 507EDECFC6FFFCFCFBFFF4F1F0FFC3B6AEFFC3B5ADFFC1B4ACFFC0B3AAFFBFB1 - A9FFBEB0A6FFBDAEA5FFBDACA3FFBCABA2FFBBAAA0FFBAA99FFFB8A69AFFB8A4 - 98FFB6A396FFB5A194FFB49F93FFB39D90FFDCCDC4FFC2AEA1FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006357 - 507EDFD2C7FFFEFEFDFFF9F5EFFFE8C696FFE9C799FFE8C697FFE7C596FFE7C4 - 95FFE6C394FFE5C293FFE4C091FFE4C090FFE3BF8FFFE2BD8CFFE9D5BFFFEBE1 - DCFFEADFD8FFE7DCD5FFE5DAD3FFE4D8D0FFE3D4CCFFC2AFA2FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006458 - 517EE0D3C8FFFFFFFFFFFAF5EFFFE3B77CFFE4B97FFFE2B87EFFE3B77DFFE2B7 - 7CFFE2B67BFFE1B57AFFE1B479FFE0B478FFE0B377FFDFB174FFE6D0B7FFEBE1 - DCFFE8DFD9FFE8DDD6FFE6D9D2FFE3D8D1FFE4D7CFFFC3AFA2FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006458 - 517EE1D2C9FFFFFFFFFFFEFEFDFFFEFFFFFFFCFDFEFFFBFBFBFFF9F7F8FFF8F5 - F6FFF7F3F2FFF5F1F0FFF4EFEEFFF1EDEBFFF0EBE9FFEEE9E6FFEDE6E2FFECE3 - DEFFEBE1DBFFE9DFD9FFE8DDD6FFE6DAD3FFE5D9D2FFC3B0A3FF81634FFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006459 - 517EE1D4CAFFFFFFFFFFFDFDFCFFEEEBE8FFF5F2F0FFF4F0EFFFF3EFECFFF2ED - EAFFF1EBE8FFEEE9E5FFEFE7E3FFECE5E1FFEAE4DEFFEAE1DCFFE8E0DAFFE7DE - D8FFE6DDD6FFE5DBD4FFE4D8D1FFE2D6CEFFE6DBD4FFC3B1A4FF81634EFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006559 - 527EE2D4CAFFFFFFFFFFF0ECEAFF5B361EFFAB9383FFB39D8EFFB39D8DFFB39D - 8DFFB29D8DFFB29C8DFFB29C8CFFB29C8CFFB29C8CFFB29C8CFFB29C8CFFB29C - 8CFFB29C8CFFB29C8CFFB29C8DFFB39D8EFFE3D8D0FFC4B1A4FF81634EFFB2A1 - 967E000000000000000000000000000000000000000000000000000000006559 - 527EE5D4CAFFFFFFFFFFF7F0EBFF5F3B24FFCCB8ADFFD7C5BAFFD9C7BDFFDCCC - C3FFE1D4CCFFE5DAD4FFE8E0DBFFEDE5E1FFF1EBE9FFF5F2EFFFF7F5F3FFF8F6 - F4FFF8F5F4FFF8F6F4FFF1EEEAFFB29C8DFFE6DAD3FFC4B2A5FF81634EFFB2A1 - 967E00000000000000000000000000000000000000000000000000000000685A - 527E9AC6C9FF35CFFEFF3DAEEBFF663E24FFD2BFB4FFE0CBBFFFE0C9BDFFE1CD - C4FFE4D5CDFFE9DED7FFEEE5E0FFF2EBE8FFF6F2F0FFFCF8F8FFFFFFFEFFFFFF - FFFFFFFFFFFFFFFFFFFFFCFAF9FFB49E8FFFE7DED7FFC5B3A6FF81634EFFB2A1 - 967E00000000000000000000000000000000007792910072A7A3001E33366957 - 4C7C86C1C8FF00BFFBFF079AEBFF6A3E23FF926D57FF5FA3C8FF4AC1E8FF6C9C - A2FF917260FF927767FF947A69FF957C6CFF977E6FFF998171FF9A8374FF9B85 - 76FF9C8678FF9C8678FF998274FF7D5E49FFE3D9D4FFC5B3A7FF81634EFFB2A1 - 967E00000000000000000000000000000000005A6F7000A9E5E40075AEAE5C90 - A5BD75D0E0FF00BFFAFF0CA3F4FF8A9A91FF3C7492FF03A4E4FF4AD5FFFF98C4 - CBFFB3A196FFB1A197FFB0A096FFB09F95FFAF9D92FFAF9C91FFAD9A8EFFAC99 - 8CFFAB988AFFAB9789FFAA9688FFA99386FFE8E0DAFFC5B4A7FF81634EFFB2A1 - 967E00000000000000000000000000000000000000002DA5BFC110C2FFFF4DD0 - FDFF64DBF9FF00B3FAFF09A8FEFF68D7FFFF04B5FFFF24CCFBFFAFD8CEFFF7DA - B8FFF3DBBBFFF3DBBAFFF2D9B9FFF1D8B7FFF0D7B4FFEED5B2FFF6EADDFFF9F6 - F4FFF7F3F1FFF5F1EEFFF5EFECFFF4EDEAFFF1EBE7FFC6B4A8FF81634EFFB2A1 - 967E00000000000000000000000000000000000000005F8A909142C7E4E960DE - F8FF64D7FAFF00B6FDFF00B8FDFF21B2FDFF1ECCF7FF93EBFCFFD2C69BFFE1AB - 63FFDFAC66FFDFAC66FFDFAC66FFDFAC66FFDFAC66FFDEA961FFEFDBC0FFF8F6 - F5FFF6F2F0FFF3EDEBFFECE2DCFFE9DFD9FFE5DBD6FFC2B1A4FF81634FFFB2A1 - 967E000000000000000000000000000E171A000E171A00040B145994A4A990EB - FCFF61F1F7FF13FAF7FF23F9F7FF93EDF7FF8CE5F8FFD5F2FDFFE9F8FFFFE7F8 - FFFFF0FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFDFEFFFFFAFAF9FFF9F7 - F5FFF7F2F0FFE8DFD8FFC7AE9FFFBEA998FFAF9888FFB09A8AFF7F604DFFB2A1 - 967E00000000000000000000000000AAFFFF00AAFFFF00AAFFFF00A4FFFF00CD - FAFF5DFCF9FFFFFFFFFFEEFEFEFF00FBF7FF00AAFEFF00A1FFFF00A1FFFF00A0 - FFFF56C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFBFFFCFBFAFFFBFA - F8FFE6DDD6FFAA9180FF5D3922FF603D26FF613E27FF613E28FF634029FFB4A3 - 987E00000000000000000000000000CAFFFF00CAFFFF00CBFFFF00B0FFFF00CD - FBFF38F5F7FFC3EFFAFFF0FFFEFF00FAF7FF00C8F7FF00C2F7FF00C2F7FF00C1 - F7FF57D7FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFDFDFCFFFCFC - FBFFE7DED8FFCCB9ACFFE6DBD5FFE2D7D0FFDCCFC5FFD7C5BBFF8E705DFFB4A2 - 9680000000000000000000000000002E383C002E383C00252F364C99B0B57DE8 - FBFF59F1F7FF25F7F7FF41FAF8FF7CEEF7FF77E4F7FFB5EFFCFFC6F2FDFFC3F2 - FDFFD9F6FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEFFFEFE - FEFFE9E1DAFFCEBCAFFFF1E9E3FFEADFD8FFE4D5CCFF9D816FFF3A291F868985 - 831C00000000000000000000000000000000000000004E7073774AB0DADC37C9 - FBFF22D5F7FF00D3F9FF02C3FBFF37D5F7FF34BEFCFFA2E6FAFFECFBFDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF - FFFFEAE2DCFFCDBBADFFEADFD8FFE3D5CBFF9F8271FF3E2D2386050100200000 - 000000000000000000000000000000000000000000003E9CC4C219C0FFFF23C9 - FCFF30D3F8FF00BEF8FF06A8FEFF4FDCF8FF00B8FCFF32C2FBFFC0EBFCFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFEAE3DEFFCDB9ABFFDDCEC4FFA58979FF3E2C1F8F0905041B000000000000 - 000000000000000000000000000000000000003451510099DDDB0091C0C35DAD - BCCF76D7E9FF00BEF9FF10A9FBFFBDDEDEFF5AC8DDFF0AB5F7FF62CEFFFFCBE4 - F1FFF1E7E0FFEFE7E1FFEEE6E1FFEEE6E1FFEEE6E0FFEDE6E0FFEDE5E0FFEEE6 - E1FFE1D4CCFFC5AE9FFFA68D7FF53E2718A10402000E00000000000000000000 - 0000000000000000000000000000000000000075B7AF0099C7C500323E425442 - 3B5C6BA8B1DA00C1FCFF0EA1F3F8A98E80C0AB9081C12698B1C10088C4C14C85 - A3C1A18D80C19E8D81C19E8B81C19D8C80C19B8C7FC19B8A7FC19C897FC19A89 - 7EC19B8B7EC1897769C2432B1BAC000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000045565A00C5FFFF0094E6E2000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000FFFFFFFFF0000007F0000007F0000007F000 - 0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 - 0007F0000007F0000007F0000007F0000007F0000007F0000007800000078000 - 0007C0000007C000000700000007000000070000000700000007C000000FC000 - 001F8000003F800000FFF8FFFFFF} - Width = 450 - Left = 72 - Top = 16 - end -end diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvUtils.pas b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvUtils.pas deleted file mode 100644 index ad87ec5..0000000 --- a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasProvUtils.pas +++ /dev/null @@ -1,234 +0,0 @@ -unit uGenerarFacturasProvUtils; - -interface - -uses - Windows, SysUtils, Classes, uBizAlbaranesProveedor, pngimage, JSDialog; - -type - TdmGenerarFacturasProv = class(TDataModule) - JsListaFacturasGeneradas: TJSDialog; - end; - - function GenerarFacturaProv(const IDAlbaran : Integer) : Boolean; overload; - function GenerarFacturaProv(AAlbaranes : IBizAlbaranProveedor) : Boolean; overload; - function GenerarFacturaProv : Boolean; overload; - -implementation - -{$R *.dfm} - -uses - uDialogUtils, - uBizDetallesAlbaranProveedor, - uAlbaranesProveedorController, uDetallesAlbaranProveedorController, - uFacturasProveedorController, uBizFacturasProveedor, uBizDetallesFacturaProveedor; - -// , -// , uProveedoresController, -// , uControllerDetallesBase, - - -// , uBizContactos, schPedidosClienteClient_Intf, -// schAlbaranesProveedorClient_Intf; - -var - dmGenerarFacturasProv: TdmGenerarFacturasProv; - AAlbaranesProveedorController : IAlbaranesProveedorController; - ADetallesAlbaranesProveedorController : IDetallesAlbaranProveedorController; - AFacturasProveedorController : IFacturasProveedorController; -// AProveedoresController : IProveedoresController; - -{ Métodos auxiliares } -{procedure CopiarPedidoAAlbaran(APedido: IBizPedidoCliente; - AAlbaran : IBizFacturaProveedor); -begin - if not Assigned(AAlbaran) then - raise Exception.Create ('Albarán no asignado (CopiarPedidoAAlbaran)'); - - if not Assigned(APedido) then - raise Exception.Create ('Pedido no asignado (CopiarPedidoAAlbaran)'); - - if not APedido.DataTable.Active then - APedido.DataTable.Active := True; - - // El albarán tiene que venir ya abierto y posicionado donde hay que copiar - AAlbaran.ID_CLIENTE := APedido.ID_CLIENTE; - AAlbaran.ID_PEDIDO := APedido.ID; - AAlbaran.CALLE := APedido.CALLE; - AAlbaran.CODIGO_POSTAL := APedido.CODIGO_POSTAL; - AAlbaran.POBLACION := APedido.POBLACION; - AAlbaran.PROVINCIA := APedido.PROVINCIA; - AAlbaran.PERSONA_CONTACTO := APedido.PERSONA_CONTACTO; - AAlbaran.TELEFONO := APedido.TELEFONO; - AAlbaran.IMPORTE_NETO := APedido.IMPORTE_NETO; - AAlbaran.IMPORTE_PORTE := APedido.IMPORTE_PORTE; - AAlbaran.DESCUENTO := APedido.DESCUENTO; - AAlbaran.IMPORTE_DESCUENTO := APedido.IMPORTE_DESCUENTO; - AAlbaran.BASE_IMPONIBLE := APedido.BASE_IMPONIBLE; - AAlbaran.IVA := APedido.IVA; - AAlbaran.IMPORTE_IVA := APedido.IMPORTE_IVA; - AAlbaran.IMPORTE_TOTAL := APedido.IMPORTE_TOTAL; - AAlbaran.DataTable.FieldByName(fld_AlbaranesClienteOBSERVACIONES).AsVariant := APedido.DataTable.FieldByName(fld_PedidosClienteOBSERVACIONES).AsVariant; - AAlbaran.ID_FORMA_PAGO := APedido.ID_FORMA_PAGO; -end; - -procedure CopiarArticulosPendAAlbaran( - APedido: IBizPedidoCliente; - AAlbaran: IBizFacturaProveedor; - AArticulosPendientes: IBizPedidoClienteArticulosPend); -var - i : integer; - ADetalles : IBizDetallesFacturaProveedor; - ADetallesController : IDetallesFacturaProveedorController; -begin - if not Assigned(AAlbaran) then - raise Exception.Create ('Albarán no asignado (CopiarArticulosPendAAlbaran)'); - - if not Assigned(APedido) then - raise Exception.Create ('Pedido no asignado (CopiarArticulosPendAAlbaran)'); - - if not Assigned(AArticulosPendientes) then - raise Exception.Create ('Artículos pendientes no asignado (CopiarArticulosPendAAlbaran)'); - - if not AArticulosPendientes.DataTable.Active then - AArticulosPendientes.DataTable.Active := True; - - // El albarán tiene que venir ya abierto y posicionado donde hay que copiar - - ADetalles := AAlbaran.Detalles; - ADetallesController := TDetallesFacturaProveedorController.Create; - try - //OJO IMPORTANTE - //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para - //obligarle siempre a recalcular los detalles una sola vez - ADetallesController.BeginUpdate(ADetalles); - - AArticulosPendientes.DataTable.First; - for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do - begin - APedido.Detalles.First; - if (APedido.Detalles.Locate('ID_ARTICULO', AArticulosPendientes.ID_ARTICULO, [])) then - if (AArticulosPendientes.CANTIDAD_PENDIENTE > 0) then - begin - ADetallesController.Add(ADetalles, TIPO_DETALLE_CONCEPTO); - ADetalles.Edit; - ADetalles.REFERENCIA := APedido.Detalles.REFERENCIA; - ADetalles.ID_ARTICULO := APedido.Detalles.ID_ARTICULO; - ADetalles.CONCEPTO := APedido.Detalles.CONCEPTO; - ADetalles.CANTIDAD := AArticulosPendientes.CANTIDAD_PENDIENTE; - ADetalles.IMPORTE_UNIDAD := APedido.Detalles.IMPORTE_UNIDAD; - ADetalles.IMPORTE_TOTAL := APedido.Detalles.IMPORTE_TOTAL; - ADetalles.DESCUENTO := APedido.Detalles.DESCUENTO; - ADetalles.IMPORTE_PORTE := APedido.Detalles.IMPORTE_PORTE; - ADetalles.VISIBLE := APedido.Detalles.VISIBLE; - ADetalles.REFERENCIA_PROVEEDOR := APedido.Detalles.REFERENCIA_PROVEEDOR; - ADetalles.Post; - AArticulosPendientes.Next; - end; - end; - finally - ADetallesController.EndUpdate(ADetalles); - ADetallesController := NIL; - end; -end; } - -procedure Inicializar; -begin - dmGenerarFacturasProv := TdmGenerarFacturasProv.Create(nil); - AAlbaranesProveedorController := TAlbaranesProveedorController.Create; - ADetallesAlbaranesProveedorController := TDetallesAlbaranProveedorController.Create; - AFacturasProveedorController := TFacturasProveedorController.Create; -// AProveedoresController := TProveedoresController.Create; -end; - -procedure Finalizar; -begin - FreeAndNIL(dmGenerarFacturasProv); - AAlbaranesProveedorController := nil; - ADetallesAlbaranesProveedorController := nil; - AFacturasProveedorController := nil; -// AProveedoresController := nil; -end; - - -function GenerarFacturaProv(const IDAlbaran : Integer) : Boolean; overload; -var - AAlbaran : IBizAlbaranProveedor; -begin - Result := False; - if not Assigned(AAlbaranesProveedorController) then - Inicializar; - - AAlbaran := AAlbaranesProveedorController.Buscar(IDAlbaran); - Result := GenerarFacturaProv(AAlbaran); - - if Assigned(AAlbaranesProveedorController) then - Finalizar; -end; - -function GenerarFacturaProv(AAlbaranes : IBizAlbaranProveedor) : Boolean; overload; -var - ARespuesta : Integer; - AFacturasNuevas : IBizFacturaProveedor; -// AArticulos: IBizPedidoClienteArticulosPend; - i: Integer; -begin -{ - Result := False; - if not Assigned(AAlbaranesProveedorController) then - Inicializar; - - if not Assigned(AAlbaranes) then - raise Exception.Create('Albarán de proveedor no asignado (GenerarFacturaProv)'); - - if not AAlbaranes.DataTable.Active then - AAlbaranes.DataTable.Active := True; - - try - AFacturasNuevas := AFacturasProveedorController.Nuevo(False); - if AFacturasProveedorController.Anadir(AFacturasNuevas, AAlbaranes) then - begin - if AFacturasNuevas.DataTable.RecordCount = 1 then - AFacturasProveedorController.Ver(AFacturasNuevas) - else begin - with dmGenerarFacturasProv.JsListaFacturasGeneradas.Content do - begin - Clear; - AFacturasNuevas.DataTable.Last; - for i := 0 to AFacturasNuevas.DataTable.RecordCount - 1 do - begin - if Length(AFacturasNuevas.REFERENCIA) > 0 then - Add(AFacturasNuevas.REFERENCIA + ': ' + AFacturasNuevas.NOMBRE); - AFacturasNuevas.DataTable.Prior; - end; - end; - dmGenerarFacturasProv.JsListaFacturasGeneradas.Execute; - end; -// actRefrescar.Execute; - end; - finally - AFacturasNuevas := NIL; - end; -} -end; - -function GenerarFacturaProv : Boolean; overload; -var - AAlbaranes : IBizAlbaranProveedor; -begin - Result := False; - if not Assigned(AAlbaranesProveedorController) then - Inicializar; - - AAlbaranes := AAlbaranesProveedorController.ElegirAlbaranes(AAlbaranesProveedorController.BuscarSinFacturar, - 'Elija el albarán o albaranes de proveedor que desea utilizar para dar de alta la factura.' - + #10#13 + 'Si elige albaranes de proveedores diferentes se dará de alta una factura por cada uno de ellos.' , True); - - Result := GenerarFacturaProv(AAlbaranes); - - if Assigned(AAlbaranesProveedorController) then - Finalizar; -end; - -end. diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PreCli_FacCli_relation.dpk b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.dpk similarity index 69% rename from Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PreCli_FacCli_relation.dpk rename to Source/Modulos/Relaciones/Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.dpk index 3d61622..b784118 100644 --- a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/PreCli_FacCli_relation.dpk +++ b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.dpk @@ -1,4 +1,4 @@ -package PreCli_FacCli_relation; +package PreCli_FacPro_relation; {$R *.res} {$ALIGN 8} @@ -27,10 +27,10 @@ package PreCli_FacCli_relation; requires PresupuestosCliente_model, PresupuestosCliente_controller, - FacturasCliente_controller, - FacturasCliente_model; + FacturasProforma_controller, + FacturasProforma_model; contains - uGenerarFacturasCliPreCliUtils in 'uGenerarFacturasCliPreCliUtils.pas' {dmGenerarFacturasCli}; + uGenerarFacturasProPreCliUtils in 'uGenerarFacturasProPreCliUtils.pas' {dmGenerarFacturasProPre}; end. diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Albaranes de cliente/PreCli_AlbCli_relation.dproj b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.dproj similarity index 82% rename from Source/Modulos/Relaciones/Presupuestos de cliente - Albaranes de cliente/PreCli_AlbCli_relation.dproj rename to Source/Modulos/Relaciones/Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.dproj index d9590a3..80501a5 100644 --- a/Source/Modulos/Relaciones/Presupuestos de cliente - Albaranes de cliente/PreCli_AlbCli_relation.dproj +++ b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas proforma/PreCli_FacPro_relation.dproj @@ -1,11 +1,11 @@  {69494a8c-0a35-41ea-b8ec-ea790bfc0662} - PreCli_AlbCli_relation.dpk + PreCli_FacPro_relation.dpk Debug AnyCPU DCC32 - ..\..\..\..\Output\Debug\Cliente\PreCli_AlbCli_relation.bpl + ..\..\..\..\Output\Debug\Cliente\PreCli_FacPro_relation.bpl 7.0 @@ -39,188 +39,7 @@ Delphi.Personality Package - - False - True - False - - - False - False - False - - - True - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 3082 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0 Borland Sample Components Delphi 1.0 Compatibility Components Borland MyBase DataAccess Components @@ -257,28 +76,22 @@ SMExport suite: data export from dataset. Written by Mike Shkolnik/Scalabium, 1998-2004. Intraweb 8.0 Design Package for Borland Development Studio 2006 Internet Explorer Components - - - PreCli_AlbCli_relation.dpk - - + PreCli_FacPro_relation.dpk - + - + MainSource - - - - + + - + +
    dmGenerarFacturasProPre
    +
    -
    -