diff --git a/Database/FACTUGES.FDB b/Database/FACTUGES.FDB index 36ed5e77..f4317862 100644 Binary files a/Database/FACTUGES.FDB and b/Database/FACTUGES.FDB differ diff --git a/Database/scripts/factuges.sql b/Database/scripts/factuges.sql index 76893ad1..d25eee95 100644 --- a/Database/scripts/factuges.sql +++ b/Database/scripts/factuges.sql @@ -85,25 +85,25 @@ CREATE GENERATOR GEN_AGENTES_COMISIONES_ID; SET GENERATOR GEN_AGENTES_COMISIONES_ID TO 0; CREATE GENERATOR GEN_ALBARANES_CLI_DETALLES_ID; -SET GENERATOR GEN_ALBARANES_CLI_DETALLES_ID TO 4; +SET GENERATOR GEN_ALBARANES_CLI_DETALLES_ID TO 7; CREATE GENERATOR GEN_ALBARANES_CLI_ID; -SET GENERATOR GEN_ALBARANES_CLI_ID TO 7; +SET GENERATOR GEN_ALBARANES_CLI_ID TO 10; CREATE GENERATOR GEN_ALBARANES_PRO_DETALLES_ID; -SET GENERATOR GEN_ALBARANES_PRO_DETALLES_ID TO 3; +SET GENERATOR GEN_ALBARANES_PRO_DETALLES_ID TO 4; CREATE GENERATOR GEN_ALBARANES_PRO_ID; -SET GENERATOR GEN_ALBARANES_PRO_ID TO 2; +SET GENERATOR GEN_ALBARANES_PRO_ID TO 3; CREATE GENERATOR GEN_ALMACENES_ID; -SET GENERATOR GEN_ALMACENES_ID TO 3; +SET GENERATOR GEN_ALMACENES_ID TO 4; CREATE GENERATOR GEN_ARTICULOS_ID; -SET GENERATOR GEN_ARTICULOS_ID TO 5; +SET GENERATOR GEN_ARTICULOS_ID TO 6; CREATE GENERATOR GEN_CATEGORIAS_ID; -SET GENERATOR GEN_CATEGORIAS_ID TO 0; +SET GENERATOR GEN_CATEGORIAS_ID TO 4; CREATE GENERATOR GEN_CLIENTES_DTOS_PROV_ID; SET GENERATOR GEN_CLIENTES_DTOS_PROV_ID TO 0; @@ -115,10 +115,10 @@ CREATE GENERATOR GEN_CONTACTOS_DATOS_BANCO_ID; SET GENERATOR GEN_CONTACTOS_DATOS_BANCO_ID TO 0; CREATE GENERATOR GEN_CONTACTOS_DIR_ID; -SET GENERATOR GEN_CONTACTOS_DIR_ID TO 5; +SET GENERATOR GEN_CONTACTOS_DIR_ID TO 8; CREATE GENERATOR GEN_CONTACTOS_ID; -SET GENERATOR GEN_CONTACTOS_ID TO 2001; +SET GENERATOR GEN_CONTACTOS_ID TO 29; CREATE GENERATOR GEN_EMPRESAS_DATOS_BANCO_ID; SET GENERATOR GEN_EMPRESAS_DATOS_BANCO_ID TO 0; @@ -130,7 +130,7 @@ CREATE GENERATOR GEN_FACTURAS_CLIENTE_ID; SET GENERATOR GEN_FACTURAS_CLIENTE_ID TO 23; CREATE GENERATOR GEN_FACTURAS_PROVEEDOR_ID; -SET GENERATOR GEN_FACTURAS_PROVEEDOR_ID TO 0; +SET GENERATOR GEN_FACTURAS_PROVEEDOR_ID TO 1; CREATE GENERATOR GEN_FACTURA_CLIENTE_DETALLES_ID; SET GENERATOR GEN_FACTURA_CLIENTE_DETALLES_ID TO 20; @@ -148,7 +148,7 @@ CREATE GENERATOR GEN_F_PERFILES_ID; SET GENERATOR GEN_F_PERFILES_ID TO 0; CREATE GENERATOR GEN_INFORMES_ID; -SET GENERATOR GEN_INFORMES_ID TO 0; +SET GENERATOR GEN_INFORMES_ID TO 11; CREATE GENERATOR GEN_MOVIMIENTOS_ID; SET GENERATOR GEN_MOVIMIENTOS_ID TO 0; @@ -166,16 +166,16 @@ CREATE GENERATOR GEN_PEDIDOS_CLI_ID; SET GENERATOR GEN_PEDIDOS_CLI_ID TO 0; CREATE GENERATOR GEN_PEDIDOS_PROV_DETALLES_ID; -SET GENERATOR GEN_PEDIDOS_PROV_DETALLES_ID TO 7; +SET GENERATOR GEN_PEDIDOS_PROV_DETALLES_ID TO 9; CREATE GENERATOR GEN_PEDIDOS_PROV_ID; -SET GENERATOR GEN_PEDIDOS_PROV_ID TO 2; +SET GENERATOR GEN_PEDIDOS_PROV_ID TO 4; CREATE GENERATOR GEN_PRESUPUESTOS_CLI_DETALLE_ID; -SET GENERATOR GEN_PRESUPUESTOS_CLI_DETALLE_ID TO 50; +SET GENERATOR GEN_PRESUPUESTOS_CLI_DETALLE_ID TO 60; CREATE GENERATOR GEN_PRESUPUESTOS_CLI_ID; -SET GENERATOR GEN_PRESUPUESTOS_CLI_ID TO 30; +SET GENERATOR GEN_PRESUPUESTOS_CLI_ID TO 34; CREATE GENERATOR GEN_RECIBOS_CLIENTE_ID; SET GENERATOR GEN_RECIBOS_CLIENTE_ID TO 6; @@ -183,6 +183,9 @@ SET GENERATOR GEN_RECIBOS_CLIENTE_ID TO 6; CREATE GENERATOR GEN_RECIBOS_PROVEEDOR_ID; SET GENERATOR GEN_RECIBOS_PROVEEDOR_ID TO 0; +CREATE GENERATOR GEN_REFERENCIAS_ID; +SET GENERATOR GEN_REFERENCIAS_ID TO 17; + CREATE GENERATOR GEN_REMESAS_CLIENTE_ID; SET GENERATOR GEN_REMESAS_CLIENTE_ID TO 0; @@ -193,7 +196,7 @@ CREATE GENERATOR GEN_TIENDA_WEB_ID; SET GENERATOR GEN_TIENDA_WEB_ID TO 0; CREATE GENERATOR GEN_TIPOS_IVA_ID; -SET GENERATOR GEN_TIPOS_IVA_ID TO 9; +SET GENERATOR GEN_TIPOS_IVA_ID TO 5; CREATE GENERATOR GEN_USUARIOS_ID; SET GENERATOR GEN_USUARIOS_ID TO 0; @@ -1037,9 +1040,10 @@ CREATE TABLE RECIBOS_PROVEEDOR ( CREATE TABLE REFERENCIAS ( + ID TIPO_ID NOT NULL, + ID_EMPRESA TIPO_ID, CODIGO VARCHAR(50) NOT NULL, VALOR VARCHAR(255) NOT NULL, - ID_EMPRESA TIPO_ID, DESCRIPCION VARCHAR(255) COLLATE ES_ES ); @@ -2498,6 +2502,7 @@ ALTER TABLE PRESUPUESTOS_CLIENTE_DETALLES ADD CONSTRAINT PK_PRESUPUESTOS_CLIENTE ALTER TABLE PROVEEDORES_DATOS ADD CONSTRAINT PK_PROVEEDORES_DATOS PRIMARY KEY (ID_PROVEEDOR); ALTER TABLE RECIBOS_CLIENTE ADD CONSTRAINT PK_RECIBOS_CLIENTE PRIMARY KEY (ID); ALTER TABLE RECIBOS_PROVEEDOR ADD CONSTRAINT PK_RECIBOS_PROVEEDOR PRIMARY KEY (ID); +ALTER TABLE REFERENCIAS ADD CONSTRAINT PK_REFERENCIAS PRIMARY KEY (ID); ALTER TABLE REMESAS_CLIENTE ADD CONSTRAINT PK_REMESAS_CLIENTE PRIMARY KEY (ID); ALTER TABLE REMESAS_PROVEEDOR ADD CONSTRAINT PK_REMESAS_PROVEEDOR PRIMARY KEY (ID); ALTER TABLE TIENDA_WEB ADD CONSTRAINT PK_TIENDA_WEB PRIMARY KEY (ID); @@ -2616,22 +2621,24 @@ RETURNS ( IMPORTE_TOTAL NUMERIC(11,2), VISIBLE SMALLINT) AS -declare variable num_capitulos integer; +declare variable num_filas integer; +declare variable contador integer; declare variable existe numeric(11,2); declare variable total_acumulado numeric(11,2); begin - num_capitulos = 0; existe = 0; total_acumulado = 0.0; + contador = 0; + num_filas = 0; /* żExiste el presupuesto? */ for select count(*) from presupuestos_cliente_detalles where id_presupuesto = :AID - into :EXISTE + into :num_filas do begin - if (existe = 0) then + if (num_filas = 0) then suspend; end @@ -2650,6 +2657,7 @@ begin if (existe = 1) then begin + contador = 0; /* Existen conceptos sin capitulo */ for select tipo_detalle, importe_total, coalesce(visible, 1) from presupuestos_cliente_detalles @@ -2658,7 +2666,8 @@ begin into :TIPO_DETALLE, :IMPORTE_TOTAL, :VISIBLE do begin - if (tipo_detalle <> 'Concepto') then + contador = contador + 1; + if ((tipo_detalle <> 'Concepto') or (contador = num_filas)) then begin importe_total = total_acumulado; tipo_detalle = 'Titulo'; diff --git a/Database/scripts/factuges_sysdata.sql b/Database/scripts/factuges_sysdata.sql index da21b376..026f0c4f 100644 --- a/Database/scripts/factuges_sysdata.sql +++ b/Database/scripts/factuges_sysdata.sql @@ -22,24 +22,26 @@ SET GENERATOR GEN_INFORMES_ID TO 11; COMMIT WORK; -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_FACTURAS_CLIENTE', '00001', 1, 'Ref. facturas de cliente'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_PEDIDOS_CLIENTE', '00001', 1, 'Ref. pedidos de cliente'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_PEDIDOS_PROVEEDOR', '00001', 1, 'Ref. pedidos de proveedor'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_ALBARANES_CLIENTE', '00001', 1, 'Ref. albaranes de cliente'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_ALBARANES_PROVEEDOR', '00001', 1, 'Ref. albaranes de proveedor'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_REMESAS_CLIENTE', '00001', 1, 'Ref. remesas de cliente'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_COMISIONES', '00001', 1, 'Ref. liquidaciones de comision'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_FACTURAS_PROVEEDOR', '00001', 1, 'Ref. facturas de proveedor'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_ALBARANES_DEV_CLIENTE', '00001', 1, 'Ref. ordenes de devolucion de cliente'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_ALBARANES_DEV_PROVEEDOR', '00001', 1, 'Ref. ordenes de devolucion de proveedor'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_REMESAS_PROVEEDOR', '00001', 1, 'Ref. remesas de proveedor'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_ABONOS_CLIENTE', '00001', 1, 'Ref. abonos de cliente'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_ABONOS_PROVEEDOR', '00001', 1, 'Ref. abonos de proveedor'); -INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA, DESCRIPCION) VALUES ('REF_PRESUPUESTOS_CLIENTE', '000001', 1, 'Ref. presupuestos de cliente'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (0, 1, 'REF_FACTURAS_CLIENTE', '00001', 'Ref. facturas de cliente'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (1, 1, 'REF_PEDIDOS_CLIENTE', '00001', 'Ref. pedidos de cliente'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (2, 1, 'REF_PEDIDOS_PROVEEDOR', '00003', 'Ref. pedidos de proveedor'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (3, 1, 'REF_ALBARANES_CLIENTE', '00004', 'Ref. albaranes de cliente'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (4, 1, 'REF_ALBARANES_PROVEEDOR', '00002', 'Ref. albaranes de proveedor'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (5, 1, 'REF_REMESAS_CLIENTE', '00001', 'Ref. remesas de cliente'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (6, 1, 'REF_COMISIONES', '00001', 'Ref. liquidaciones de comision'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (7, 1, 'REF_FACTURAS_PROVEEDOR', '00001', 'Ref. facturas de proveedor'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (8, 1, 'REF_ALBARANES_DEV_CLIENTE', '00001', 'Ref. ordenes de devolucion de cliente'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (9, 1, 'REF_ALBARANES_DEV_PROVEEDOR', '00001', 'Ref. ordenes de devolucion de proveedor'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (10, 1, 'REF_REMESAS_PROVEEDOR', '00001', 'Ref. remesas de proveedor'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (11, 1, 'REF_ABONOS_CLIENTE', '00001', 'Ref. abonos de cliente'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (12, 1, 'REF_ABONOS_PROVEEDOR', '00001', 'Ref. abonos de proveedor'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (13, 1, 'REF_PRESUPUESTOS_CLIENTE', '000004', 'Ref. presupuestos de cliente'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (14, NULL, 'REF_CLIENTES', '00001', 'Ref. clientes'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (15, NULL, 'REF_PROVEEDORES', '00001', 'Ref. proveedores'); +INSERT INTO REFERENCIAS (ID, ID_EMPRESA, CODIGO, VALOR, DESCRIPCION) VALUES (16, NULL, 'REF_EMPLEADOS', '000001', 'Ref. empleados'); +SET GENERATOR GEN_REFERENCIAS_ID TO 17; COMMIT WORK; - - INSERT INTO TIPOS_IVA (ID, REFERENCIA, DESCRIPCION, IVA, RE) VALUES (1, 'IVA16', 'IVA16', 16, 4); INSERT INTO TIPOS_IVA (ID, REFERENCIA, DESCRIPCION, IVA, RE) VALUES (2, 'IVA4', 'IVA4', 4, 0.5); INSERT INTO TIPOS_IVA (ID, REFERENCIA, DESCRIPCION, IVA, RE) VALUES (3, 'IVA7', 'IVA7', 7, 1); diff --git a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas index 87a05131..e5aae73b 100644 --- a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas +++ b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas @@ -9,21 +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_DarReferencia = '{A693E269-BAF7-46A1-84E5-DBC746856BE3}'; - RID_AlbaranesCliente = '{1D19F302-9D09-4E86-9602-98B88C9FF5E7}'; - RID_AlbaranesCliente_Detalles = '{DFBF54C4-E8F9-47BA-9920-89709FB21148}'; + RID_AlbaranesCliente = '{4C4AED7E-9AD2-4F22-B68E-AD7B8F338052}'; + RID_AlbaranesCliente_Detalles = '{1F13B20A-918D-41E3-970E-3AC9E0E6BB9B}'; { Data table names } - nme_DarReferencia = 'DarReferencia'; nme_AlbaranesCliente = 'AlbaranesCliente'; nme_AlbaranesCliente_Detalles = 'AlbaranesCliente_Detalles'; - { DarReferencia fields } - fld_DarReferenciaVALOR = 'VALOR'; - - { DarReferencia field indexes } - idx_DarReferenciaVALOR = 0; - { AlbaranesCliente fields } fld_AlbaranesClienteID = 'ID'; fld_AlbaranesClienteID_EMPRESA = 'ID_EMPRESA'; @@ -139,44 +131,9 @@ const idx_AlbaranesCliente_DetallesREFERENCIA_PROVEEDOR = 13; type - { IDarReferencia } - IDarReferencia = interface(IDAStronglyTypedDataTable) - ['{15B4231D-DD94-42A2-9AC2-4C32AFB4B267}'] - { Property getters and setters } - function GetVALORValue: String; - procedure SetVALORValue(const aValue: String); - function GetVALORIsNull: Boolean; - procedure SetVALORIsNull(const aValue: Boolean); - - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - end; - - { TDarReferenciaDataTableRules } - TDarReferenciaDataTableRules = class(TIntfObjectDADataTableRules, IDarReferencia) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - procedure SetVALORValue(const aValue: String); virtual; - function GetVALORIsNull: Boolean; virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - { IAlbaranesCliente } IAlbaranesCliente = interface(IDAStronglyTypedDataTable) - ['{26F46D95-DBBE-40FD-BB99-EEC4B6EE75CD}'] + ['{CC452DE4-1563-4ECC-B92C-60D8F9E3350A}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -667,7 +624,7 @@ type { IAlbaranesCliente_Detalles } IAlbaranesCliente_Detalles = interface(IDAStronglyTypedDataTable) - ['{C442C7DF-32BE-4A00-8446-3DA2F08508AC}'] + ['{CD3C0BC2-392C-4937-885E-7396FEC8D6CC}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -860,39 +817,6 @@ implementation uses Variants, uROBinaryHelpers; -{ TDarReferenciaDataTableRules } -constructor TDarReferenciaDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TDarReferenciaDataTableRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaDataTableRules.GetVALORValue: String; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].AsString; -end; - -procedure TDarReferenciaDataTableRules.SetVALORValue(const aValue: String); -begin - DataTable.Fields[idx_DarReferenciaVALOR].AsString := aValue; -end; - -function TDarReferenciaDataTableRules.GetVALORIsNull: boolean; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].IsNull; -end; - -procedure TDarReferenciaDataTableRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_DarReferenciaVALOR].AsVariant := Null; -end; - - { TAlbaranesClienteDataTableRules } constructor TAlbaranesClienteDataTableRules.Create(aDataTable: TDADataTable); var @@ -2043,7 +1967,6 @@ end; initialization - RegisterDataTableRules(RID_DarReferencia, TDarReferenciaDataTableRules); RegisterDataTableRules(RID_AlbaranesCliente, TAlbaranesClienteDataTableRules); RegisterDataTableRules(RID_AlbaranesCliente_Detalles, TAlbaranesCliente_DetallesDataTableRules); diff --git a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas index d9a95d41..64fa159b 100644 --- a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas +++ b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas @@ -9,48 +9,13 @@ 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_DarReferenciaDelta = '{95530CA0-F6C5-439B-ACE3-8DD1B50D65AC}'; - RID_AlbaranesClienteDelta = '{9E1A105B-7BE6-4100-BED9-9EB5E4517371}'; - RID_AlbaranesCliente_DetallesDelta = '{4FD893A0-294F-4ACF-8656-9DC37A524688}'; + RID_AlbaranesClienteDelta = '{14AC5B6B-A7CC-4A17-846D-4029E0864BF7}'; + RID_AlbaranesCliente_DetallesDelta = '{A1C938B1-881C-4020-8257-2103E228E798}'; type - { IDarReferenciaDelta } - IDarReferenciaDelta = interface(IDarReferencia) - ['{95530CA0-F6C5-439B-ACE3-8DD1B50D65AC}'] - { Property getters and setters } - function GetOldVALORValue : String; - - { Properties } - property OldVALOR : String read GetOldVALORValue; - end; - - { TDarReferenciaBusinessProcessorRules } - TDarReferenciaBusinessProcessorRules = class(TDABusinessProcessorRules, IDarReferencia, IDarReferenciaDelta) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - function GetVALORIsNull: Boolean; virtual; - function GetOldVALORValue: String; virtual; - function GetOldVALORIsNull: Boolean; virtual; - procedure SetVALORValue(const aValue: String); virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR : String read GetVALORValue write SetVALORValue; - property VALORIsNull : Boolean read GetVALORIsNull write SetVALORIsNull; - property OldVALOR : String read GetOldVALORValue; - property OldVALORIsNull : Boolean read GetOldVALORIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - { IAlbaranesClienteDelta } IAlbaranesClienteDelta = interface(IAlbaranesCliente) - ['{9E1A105B-7BE6-4100-BED9-9EB5E4517371}'] + ['{14AC5B6B-A7CC-4A17-846D-4029E0864BF7}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -542,7 +507,7 @@ type { IAlbaranesCliente_DetallesDelta } IAlbaranesCliente_DetallesDelta = interface(IAlbaranesCliente_Detalles) - ['{4FD893A0-294F-4ACF-8656-9DC37A524688}'] + ['{A1C938B1-881C-4020-8257-2103E228E798}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_ALBARANValue : Integer; @@ -735,49 +700,6 @@ implementation uses Variants, uROBinaryHelpers, uDAInterfaces; -{ TDarReferenciaBusinessProcessorRules } -constructor TDarReferenciaBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TDarReferenciaBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]); -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]); -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := aValue; -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := Null; -end; - - { TAlbaranesClienteBusinessProcessorRules } constructor TAlbaranesClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); var @@ -2460,7 +2382,6 @@ end; initialization - RegisterBusinessProcessorRules(RID_DarReferenciaDelta, TDarReferenciaBusinessProcessorRules); RegisterBusinessProcessorRules(RID_AlbaranesClienteDelta, TAlbaranesClienteBusinessProcessorRules); RegisterBusinessProcessorRules(RID_AlbaranesCliente_DetallesDelta, TAlbaranesCliente_DetallesBusinessProcessorRules); diff --git a/Source/Modulos/Albaranes de cliente/Model/uBizAlbaranClienteServer.pas b/Source/Modulos/Albaranes de cliente/Model/uBizAlbaranClienteServer.pas index d4c7e8f7..d9dc2a49 100644 --- a/Source/Modulos/Albaranes de cliente/Model/uBizAlbaranClienteServer.pas +++ b/Source/Modulos/Albaranes de cliente/Model/uBizAlbaranClienteServer.pas @@ -8,73 +8,110 @@ uses const BIZ_SERVER_ALBARAN_CLIENTE = 'Server.AlbaranCliente'; - REF_ALBARANES_CLIENTE = 'REF_ALBARANES_CLIENTE'; - REF_ALBARANES_DEV_CLIENTE = 'REF_ALBARANES_DEV_CLIENTE'; type TBizAlbaranClienteServer = class(TAlbaranesClienteBusinessProcessorRules) + private + FReferenciaAutomatica : Boolean; + function DarReferencia : String; + function IncrementarReferencia : Boolean; protected - procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; + procedure BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); override; + procedure AfterProcessChange(Sender: TDABusinessProcessor; + aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); override; end; implementation uses Variants, uDAClasses, uReferenciasUtils, uBusinessUtils, uROClasses, uDataModuleServer, - schAlbaranesClienteClient_Intf; + schAlbaranesClienteClient_Intf, srvReferencias_Impl, JclStrings; + +const + REF_ALBARANES_CLIENTE = 'REF_ALBARANES_CLIENTE'; + REF_ALBARANES_DEV_CLIENTE = 'REF_ALBARANES_DEV_CLIENTE'; { TBizAlbaranClienteServer } -procedure TBizAlbaranClienteServer.BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); -var - ASchema : TDASchema; - ACurrentConn : IDAConnection; - dsData: IDADataset; - Empresa : Variant; - CodigoReferencia: String; - +procedure TBizAlbaranClienteServer.AfterProcessChange( + Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); begin inherited; + { Por defecto, no es necesario mantener los deltas una vez + procesados los cambios. } + CanRemoveFromDelta := True; + + case aChange.ChangeType of + ctInsert, ctUpdate: begin + if FReferenciaAutomatica then + begin + IncrementarReferencia; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; + end; + end; +end; + +procedure TBizAlbaranClienteServer.BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); +begin + inherited; + + FReferenciaAutomatica := False; + case Sender.CurrentChange.ChangeType of ctInsert, ctUpdate: begin //Si la referencia no ha sido asignada le asignamos una nosotros - if (VarIsNull(Sender.CurrentChange.NewValueByName[fld_AlbaranesClienteREFERENCIA])) - or (VarToStr(Sender.CurrentChange.NewValueByName[fld_AlbaranesClienteREFERENCIA]) = '') then + if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then begin - ASchema := BusinessProcessor.Schema; - ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); - - try - //Siempre va a estar rellena - Empresa := Sender.CurrentChange.NewValueByName[fld_AlbaranesClienteID_EMPRESA]; - if (Sender.CurrentChange.NewValueByName[fld_AlbaranesClienteIMPORTE_TOTAL] < 0) then - CodigoReferencia := REF_ALBARANES_DEV_CLIENTE - else - CodigoReferencia := REF_ALBARANES_CLIENTE; - - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [CodigoReferencia, Empresa]); - except - RaiseError('No existe la tabla REFERENCIAS'); - end; - - dsData.Active := True; - - if dsData.IsEmpty then - RaiseError('NO HAY REFERENCIA ' + CodigoReferencia + ' DECLARADA EN TABLA REFERENCIAS'); - - REFERENCIA := dsData.FieldByName(fld_DarReferenciaVALOR).AsString; - - try - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'EMPRESA'], [CodigoReferencia, DarReferenciaSiguiente(REFERENCIA), Empresa]); - except - RaiseError('Error al asignar la nueva ' + REFERENCIA + ' referencia en tabla'); - end; - + FReferenciaAutomatica := True; + REFERENCIA := DarReferencia; end; end; end; end; +function TBizAlbaranClienteServer.DarReferencia: String; +var + ACodigoReferencia : String; +begin + if (IMPORTE_TOTAL < 0) then + ACodigoReferencia := REF_ALBARANES_DEV_CLIENTE + else + ACodigoReferencia := REF_ALBARANES_CLIENTE; + + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(ACodigoReferencia, ID_EMPRESA) + finally + Free; + end; +end; + +function TBizAlbaranClienteServer.IncrementarReferencia: Boolean; +var + ACodigoReferencia : String; +begin + if (IMPORTE_TOTAL < 0) then + ACodigoReferencia := REF_ALBARANES_DEV_CLIENTE + else + ACodigoReferencia := REF_ALBARANES_CLIENTE; + + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(ACodigoReferencia, + Self.REFERENCIA, ID_EMPRESA) + finally + Free; + end; +end; + initialization RegisterBusinessProcessorRules(BIZ_SERVER_ALBARAN_CLIENTE, TBizAlbaranClienteServer); diff --git a/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm b/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm index 6502ed78..62353d58 100644 --- a/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm +++ b/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm @@ -14,40 +14,6 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente ConnectionManager = dmServer.ConnectionManager DataDictionary = DADataDictionary Datasets = < - item - Params = < - item - Name = 'CODIGO' - Value = '' - ParamType = daptInput - end - item - Name = 'EMPRESA' - Value = '' - ParamType = daptInput - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'SELECT'#10' VALOR'#10'FROM'#10' REFERENCIAS'#10'WHERE'#10' CODIGO = :COD' + - 'IGO'#10'AND ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'VALOR' - TableField = 'VALOR' - end> - end> - Name = 'DarReferencia' - Fields = < - item - Name = 'VALOR' - DataType = datString - Size = 255 - end> - end item Params = <> Statements = < @@ -591,32 +557,6 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente JoinDataTables = <> UnionDataTables = <> Commands = < - item - Params = < - item - Name = 'VALOR' - Value = '' - end - item - Name = 'CODIGO' - Value = '' - end - item - Name = 'EMPRESA' - Value = '' - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'UPDATE REFERENCIAS SET'#10' VALOR = :VALOR'#10'WHERE CODIGO = :COD' + - 'IGO AND'#10' ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'ModificarReferencia' - end item Params = < item diff --git a/Source/Modulos/Albaranes de proveedor/Model/schAlbaranesProveedorClient_Intf.pas b/Source/Modulos/Albaranes de proveedor/Model/schAlbaranesProveedorClient_Intf.pas index d7a3411a..a3a3442f 100644 --- a/Source/Modulos/Albaranes de proveedor/Model/schAlbaranesProveedorClient_Intf.pas +++ b/Source/Modulos/Albaranes de proveedor/Model/schAlbaranesProveedorClient_Intf.pas @@ -9,21 +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_DarReferencia = '{E264DAAA-A65A-4F97-8399-054CD6715754}'; - RID_AlbaranesProveedor = '{8070DE55-5BC2-4DCA-B26F-B6E77353CD13}'; - RID_AlbaranesProveedor_Detalles = '{B5916447-B176-439A-8E99-A6CDA1527B86}'; + RID_AlbaranesProveedor = '{B3C84E57-4911-483C-BF95-BC529DBB583C}'; + RID_AlbaranesProveedor_Detalles = '{F665A12E-A0DC-4E29-A620-593A4192A81D}'; { Data table names } - nme_DarReferencia = 'DarReferencia'; nme_AlbaranesProveedor = 'AlbaranesProveedor'; nme_AlbaranesProveedor_Detalles = 'AlbaranesProveedor_Detalles'; - { DarReferencia fields } - fld_DarReferenciaVALOR = 'VALOR'; - - { DarReferencia field indexes } - idx_DarReferenciaVALOR = 0; - { AlbaranesProveedor fields } fld_AlbaranesProveedorID = 'ID'; fld_AlbaranesProveedorID_EMPRESA = 'ID_EMPRESA'; @@ -133,44 +125,9 @@ const idx_AlbaranesProveedor_DetallesREFERENCIA_PROVEEDOR = 13; type - { IDarReferencia } - IDarReferencia = interface(IDAStronglyTypedDataTable) - ['{87BCEB3E-3FAF-44FF-A992-70B549FF79CE}'] - { Property getters and setters } - function GetVALORValue: String; - procedure SetVALORValue(const aValue: String); - function GetVALORIsNull: Boolean; - procedure SetVALORIsNull(const aValue: Boolean); - - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - end; - - { TDarReferenciaDataTableRules } - TDarReferenciaDataTableRules = class(TIntfObjectDADataTableRules, IDarReferencia) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - procedure SetVALORValue(const aValue: String); virtual; - function GetVALORIsNull: Boolean; virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - { IAlbaranesProveedor } IAlbaranesProveedor = interface(IDAStronglyTypedDataTable) - ['{91E3DC89-DDB4-4727-88A3-1931B49B7F08}'] + ['{E60D9CCD-626B-4506-B2ED-69DC12E34AC7}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -625,7 +582,7 @@ type { IAlbaranesProveedor_Detalles } IAlbaranesProveedor_Detalles = interface(IDAStronglyTypedDataTable) - ['{A644C742-27E7-449C-9A6B-ED24143E13CD}'] + ['{EEB82A6C-B78D-4D5E-A152-218B7BC3E9DF}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -818,39 +775,6 @@ implementation uses Variants, uROBinaryHelpers; -{ TDarReferenciaDataTableRules } -constructor TDarReferenciaDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TDarReferenciaDataTableRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaDataTableRules.GetVALORValue: String; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].AsString; -end; - -procedure TDarReferenciaDataTableRules.SetVALORValue(const aValue: String); -begin - DataTable.Fields[idx_DarReferenciaVALOR].AsString := aValue; -end; - -function TDarReferenciaDataTableRules.GetVALORIsNull: boolean; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].IsNull; -end; - -procedure TDarReferenciaDataTableRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_DarReferenciaVALOR].AsVariant := Null; -end; - - { TAlbaranesProveedorDataTableRules } constructor TAlbaranesProveedorDataTableRules.Create(aDataTable: TDADataTable); var @@ -1938,7 +1862,6 @@ end; initialization - RegisterDataTableRules(RID_DarReferencia, TDarReferenciaDataTableRules); RegisterDataTableRules(RID_AlbaranesProveedor, TAlbaranesProveedorDataTableRules); RegisterDataTableRules(RID_AlbaranesProveedor_Detalles, TAlbaranesProveedor_DetallesDataTableRules); diff --git a/Source/Modulos/Albaranes de proveedor/Model/schAlbaranesProveedorServer_Intf.pas b/Source/Modulos/Albaranes de proveedor/Model/schAlbaranesProveedorServer_Intf.pas index 678de95e..0fe653d3 100644 --- a/Source/Modulos/Albaranes de proveedor/Model/schAlbaranesProveedorServer_Intf.pas +++ b/Source/Modulos/Albaranes de proveedor/Model/schAlbaranesProveedorServer_Intf.pas @@ -9,48 +9,13 @@ 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_DarReferenciaDelta = '{AD9EC61F-92A8-4757-A729-430A9C0F1014}'; - RID_AlbaranesProveedorDelta = '{6120285E-A519-4B85-96C3-9568FD81A17F}'; - RID_AlbaranesProveedor_DetallesDelta = '{CEDDEB44-9AE4-468F-A241-3235B7D100D6}'; + RID_AlbaranesProveedorDelta = '{262D0052-9D3B-419A-B2F4-B52A68D8D3DB}'; + RID_AlbaranesProveedor_DetallesDelta = '{A33E831D-4454-40E5-BBBD-B367628D4A88}'; type - { IDarReferenciaDelta } - IDarReferenciaDelta = interface(IDarReferencia) - ['{AD9EC61F-92A8-4757-A729-430A9C0F1014}'] - { Property getters and setters } - function GetOldVALORValue : String; - - { Properties } - property OldVALOR : String read GetOldVALORValue; - end; - - { TDarReferenciaBusinessProcessorRules } - TDarReferenciaBusinessProcessorRules = class(TDABusinessProcessorRules, IDarReferencia, IDarReferenciaDelta) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - function GetVALORIsNull: Boolean; virtual; - function GetOldVALORValue: String; virtual; - function GetOldVALORIsNull: Boolean; virtual; - procedure SetVALORValue(const aValue: String); virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR : String read GetVALORValue write SetVALORValue; - property VALORIsNull : Boolean read GetVALORIsNull write SetVALORIsNull; - property OldVALOR : String read GetOldVALORValue; - property OldVALORIsNull : Boolean read GetOldVALORIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - { IAlbaranesProveedorDelta } IAlbaranesProveedorDelta = interface(IAlbaranesProveedor) - ['{6120285E-A519-4B85-96C3-9568FD81A17F}'] + ['{262D0052-9D3B-419A-B2F4-B52A68D8D3DB}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -506,7 +471,7 @@ type { IAlbaranesProveedor_DetallesDelta } IAlbaranesProveedor_DetallesDelta = interface(IAlbaranesProveedor_Detalles) - ['{CEDDEB44-9AE4-468F-A241-3235B7D100D6}'] + ['{A33E831D-4454-40E5-BBBD-B367628D4A88}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_ALBARANValue : Integer; @@ -699,49 +664,6 @@ implementation uses Variants, uROBinaryHelpers, uDAInterfaces; -{ TDarReferenciaBusinessProcessorRules } -constructor TDarReferenciaBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TDarReferenciaBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]); -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]); -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := aValue; -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := Null; -end; - - { TAlbaranesProveedorBusinessProcessorRules } constructor TAlbaranesProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); var @@ -2331,7 +2253,6 @@ end; initialization - RegisterBusinessProcessorRules(RID_DarReferenciaDelta, TDarReferenciaBusinessProcessorRules); RegisterBusinessProcessorRules(RID_AlbaranesProveedorDelta, TAlbaranesProveedorBusinessProcessorRules); RegisterBusinessProcessorRules(RID_AlbaranesProveedor_DetallesDelta, TAlbaranesProveedor_DetallesBusinessProcessorRules); diff --git a/Source/Modulos/Albaranes de proveedor/Model/uBizAlbaranProveedorServer.PAS b/Source/Modulos/Albaranes de proveedor/Model/uBizAlbaranProveedorServer.PAS index e4ef8edd..01989528 100644 --- a/Source/Modulos/Albaranes de proveedor/Model/uBizAlbaranProveedorServer.PAS +++ b/Source/Modulos/Albaranes de proveedor/Model/uBizAlbaranProveedorServer.PAS @@ -8,73 +8,110 @@ uses const BIZ_SERVER_ALBARAN_PROVEEDOR = 'Server.AlbaranProveedor'; - REF_ALBARANES_PROVEEDOR = 'REF_ALBARANES_PROVEEDOR'; - REF_ALBARANES_DEV_PROVEEDOR = 'REF_ALBARANES_DEV_PROVEEDOR'; type TBizAlbaranProveedorServer = class(TFacturasClienteBusinessProcessorRules) + private + FReferenciaAutomatica : Boolean; + function DarReferencia : String; + function IncrementarReferencia : Boolean; protected - procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; + procedure BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); override; + procedure AfterProcessChange(Sender: TDABusinessProcessor; + aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); override; end; implementation uses - Dialogs, SysUtils, Variants, uDataModuleServer, uDAClasses, DARemoteService_Impl, - schAlbaranesProveedorClient_Intf, uBusinessUtils, uReferenciasUtils, uROClasses; + Dialogs, SysUtils, Variants, uDataModuleServer, uDAClasses, + schAlbaranesProveedorClient_Intf, uBusinessUtils, uROClasses, + srvReferencias_Impl; + +const + REF_ALBARANES_PROVEEDOR = 'REF_ALBARANES_PROVEEDOR'; + REF_ALBARANES_DEV_PROVEEDOR = 'REF_ALBARANES_DEV_PROVEEDOR'; + { TBizFacturasClienteServer } -procedure TBizAlbaranProveedorServer.BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); -var - ASchema : TDASchema; - ACurrentConn : IDAConnection; - dsData: IDADataset; - Empresa : Variant; - CodigoReferencia: String; - +procedure TBizAlbaranProveedorServer.AfterProcessChange( + Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); begin inherited; + { Por defecto, no es necesario mantener los deltas una vez + procesados los cambios. } + CanRemoveFromDelta := True; + + case aChange.ChangeType of + ctInsert, ctUpdate: begin + if FReferenciaAutomatica then + begin + IncrementarReferencia; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; + end; + end; +end; + +procedure TBizAlbaranProveedorServer.BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); +begin + FReferenciaAutomatica := False; + case Sender.CurrentChange.ChangeType of ctInsert, ctUpdate: begin //Si la referencia no ha sido asignada le asignamos una nosotros - if (VarIsNull(Sender.CurrentChange.NewValueByName[fld_AlbaranesProveedorREFERENCIA])) - or (VarToStr(Sender.CurrentChange.NewValueByName[fld_AlbaranesProveedorREFERENCIA]) = '') then + if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then begin - ASchema := BusinessProcessor.Schema; - ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); - - try - //Siempre va a estar rellena - Empresa := Sender.CurrentChange.NewValueByName[fld_AlbaranesProveedorID_EMPRESA]; - if Sender.CurrentChange.NewValueByName[fld_AlbaranesProveedorIMPORTE_TOTAL] < 0 then - CodigoReferencia := REF_ALBARANES_DEV_PROVEEDOR - else - CodigoReferencia := REF_ALBARANES_PROVEEDOR; - - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [CodigoReferencia, Empresa]); - except - RaiseError('No existe la tabla REFERENCIAS'); - end; - - dsData.Active := True; - - if dsData.IsEmpty then - RaiseError('NO HAY REFERENCIA ' + CodigoReferencia + ' DECLARADA EN TABLA REFERENCIAS'); - - REFERENCIA := dsData.FieldByName(fld_DarReferenciaVALOR).AsString; - - try - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'EMPRESA'], [CodigoReferencia, DarReferenciaSiguiente(REFERENCIA), Empresa]); - except - RaiseError('Error al asignar la nueva ' + REFERENCIA + ' referencia en tabla'); - end; - + FReferenciaAutomatica := True; + REFERENCIA := DarReferencia; end; end; end; end; +function TBizAlbaranProveedorServer.DarReferencia: String; +var + ACodigoReferencia : String; +begin + if (IMPORTE_TOTAL < 0) then + ACodigoReferencia := REF_ALBARANES_DEV_PROVEEDOR + else + ACodigoReferencia := REF_ALBARANES_PROVEEDOR; + + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(ACodigoReferencia, ID_EMPRESA) + finally + Free; + end; +end; + +function TBizAlbaranProveedorServer.IncrementarReferencia: Boolean; +var + ACodigoReferencia : String; +begin + if (IMPORTE_TOTAL < 0) then + ACodigoReferencia := REF_ALBARANES_DEV_PROVEEDOR + else + ACodigoReferencia := REF_ALBARANES_PROVEEDOR; + + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(ACodigoReferencia, + Self.REFERENCIA, ID_EMPRESA) + finally + Free; + end; +end; + initialization RegisterBusinessProcessorRules(BIZ_SERVER_ALBARAN_PROVEEDOR, TBizAlbaranProveedorServer); diff --git a/Source/Modulos/Albaranes de proveedor/Servidor/srvAlbaranesProveedor_Impl.dfm b/Source/Modulos/Albaranes de proveedor/Servidor/srvAlbaranesProveedor_Impl.dfm index edda8c75..f980ffd1 100644 --- a/Source/Modulos/Albaranes de proveedor/Servidor/srvAlbaranesProveedor_Impl.dfm +++ b/Source/Modulos/Albaranes de proveedor/Servidor/srvAlbaranesProveedor_Impl.dfm @@ -14,40 +14,6 @@ object srvAlbaranesProveedor: TsrvAlbaranesProveedor ConnectionManager = dmServer.ConnectionManager DataDictionary = DADataDictionary Datasets = < - item - Params = < - item - Name = 'CODIGO' - Value = '' - ParamType = daptInput - end - item - Name = 'EMPRESA' - Value = '' - ParamType = daptInput - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'SELECT'#10' VALOR'#10'FROM'#10' REFERENCIAS'#10'WHERE'#10' CODIGO = :COD' + - 'IGO'#10'AND ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'VALOR' - TableField = 'VALOR' - end> - end> - Name = 'DarReferencia' - Fields = < - item - Name = 'VALOR' - DataType = datString - Size = 255 - end> - end item Params = <> Statements = < @@ -565,32 +531,6 @@ object srvAlbaranesProveedor: TsrvAlbaranesProveedor JoinDataTables = <> UnionDataTables = <> Commands = < - item - Params = < - item - Name = 'VALOR' - Value = '' - end - item - Name = 'CODIGO' - Value = '' - end - item - Name = 'EMPRESA' - Value = '' - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'UPDATE REFERENCIAS SET'#10' VALOR = :VALOR'#10'WHERE CODIGO = :COD' + - 'IGO AND'#10' ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'ModificarReferencia' - end item Params = < item diff --git a/Source/Modulos/Contactos/Model/uBizClientesServer.pas b/Source/Modulos/Contactos/Model/uBizClientesServer.pas index ccb98631..9903cb77 100644 --- a/Source/Modulos/Contactos/Model/uBizClientesServer.pas +++ b/Source/Modulos/Contactos/Model/uBizClientesServer.pas @@ -12,6 +12,9 @@ const type TBizClienteServer = class(TBizContactosServer) protected + function DarReferenciaContacto : String; override; + function IncrementarReferenciaContacto : Boolean; override; + procedure Insert_Datos_Contacto(aChange: TDADeltaChange); override; procedure Update_Datos_Contacto(aChange: TDADeltaChange); override; procedure Delete_Datos_Contacto(aChange: TDADeltaChange); override; @@ -20,11 +23,25 @@ type implementation uses - uDataModuleServer, uDAClasses, - schContactosClient_Intf, uBusinessUtils; + uDataModuleServer, uDAClasses, + schContactosClient_Intf, uBusinessUtils, srvReferencias_Impl; + +const + REF_CLIENTES = 'REF_CLIENTES'; + { TBizClienteServer } +function TBizClienteServer.DarReferenciaContacto: String; +begin + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(REF_CLIENTES) + finally + Free; + end; +end; + procedure TBizClienteServer.Delete_Datos_Contacto(aChange: TDADeltaChange); var ASchema : TDASchema; @@ -48,6 +65,16 @@ begin end; end; +function TBizClienteServer.IncrementarReferenciaContacto: Boolean; +begin + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(REF_CLIENTES, Self.REFERENCIA) + finally + Free; + end; +end; + procedure TBizClienteServer.Insert_Datos_Contacto(aChange: TDADeltaChange); var ASchema : TDASchema; diff --git a/Source/Modulos/Contactos/Model/uBizContactosServer.pas b/Source/Modulos/Contactos/Model/uBizContactosServer.pas index e339a702..98d8a837 100644 --- a/Source/Modulos/Contactos/Model/uBizContactosServer.pas +++ b/Source/Modulos/Contactos/Model/uBizContactosServer.pas @@ -11,7 +11,12 @@ const type TBizContactosServer = class(TContactosBusinessProcessorRules) + private + FReferenciaAutomatica : Boolean; protected + function DarReferenciaContacto : String; virtual; abstract; + function IncrementarReferenciaContacto : Boolean; virtual; abstract; + procedure Insert_Datos_Contacto(aChange: TDADeltaChange); virtual; procedure Update_Datos_Contacto(aChange: TDADeltaChange); virtual; procedure Delete_Datos_Contacto(aChange: TDADeltaChange); virtual; @@ -20,6 +25,9 @@ type procedure Update_Categoria_Contacto(aChange: TDADeltaChange); virtual; procedure Delete_Categoria_Contacto(aChange: TDADeltaChange); virtual; + procedure BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); override; + procedure AfterProcessChange(Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; var CanRemoveFromDelta: Boolean); override; @@ -28,14 +36,13 @@ type aChangeType: TDAChangeType; aChange: TDADeltaChange; const aCommand: IDASQLCommand; var CanRemoveFromDelta: Boolean; Error: Exception); override; - end; implementation uses - Dialogs, uDataModuleServer, uDAClasses, - schContactosClient_Intf, uBusinessUtils; + Dialogs, uDataModuleServer, uDAClasses, Variants, + schContactosClient_Intf, uBusinessUtils, srvReferencias_Impl; { TBizContactosServer } @@ -43,15 +50,36 @@ procedure TBizContactosServer.AfterProcessChange(Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; var CanRemoveFromDelta: Boolean); begin inherited; + { Por defecto, no es necesario mantener los deltas una vez + procesados los cambios. } + CanRemoveFromDelta := True; case aChange.ChangeType of ctInsert: begin Insert_Categoria_Contacto(aChange); Insert_Datos_Contacto(aChange); + if FReferenciaAutomatica then + begin + IncrementarReferenciaContacto; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; end; ctUpdate: begin Update_Categoria_Contacto(aChange); Update_Datos_Contacto(aChange); + if FReferenciaAutomatica then + begin + IncrementarReferenciaContacto; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; end; ctDelete: begin Delete_Categoria_Contacto(aChange); @@ -59,7 +87,24 @@ begin end; end; - CanRemoveFromDelta := True; + +end; + +procedure TBizContactosServer.BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); +begin + inherited; + FReferenciaAutomatica := False; + case Sender.CurrentChange.ChangeType of + ctInsert, ctUpdate: begin + // Si la referencia no ha sido asignada le asignamos una nosotros + if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then + begin + FReferenciaAutomatica := True; + REFERENCIA := DarReferenciaContacto; + end; + end; + end; end; procedure TBizContactosServer.Delete_Categoria_Contacto( diff --git a/Source/Modulos/Contactos/Model/uBizEmpleadosServer.pas b/Source/Modulos/Contactos/Model/uBizEmpleadosServer.pas index 191fc2a6..97e284d4 100644 --- a/Source/Modulos/Contactos/Model/uBizEmpleadosServer.pas +++ b/Source/Modulos/Contactos/Model/uBizEmpleadosServer.pas @@ -12,6 +12,9 @@ const type TBizEmpleadoServer = class(TBizContactosServer) protected + function DarReferenciaContacto : String; override; + function IncrementarReferenciaContacto : Boolean; override; + procedure Insert_Datos_Contacto(aChange: TDADeltaChange); override; procedure Update_Datos_Contacto(aChange: TDADeltaChange); override; procedure Delete_Datos_Contacto(aChange: TDADeltaChange); override; @@ -21,10 +24,23 @@ implementation uses uDataModuleServer, uDAClasses, - schContactosClient_Intf, uBusinessUtils; + schContactosClient_Intf, uBusinessUtils, srvReferencias_Impl; + +const + REF_EMPLEADOS = 'REF_EMPLEADOS'; { TBizEmpleadoServer } +function TBizEmpleadoServer.DarReferenciaContacto: String; +begin + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(REF_EMPLEADOS) + finally + Free; + end; +end; + procedure TBizEmpleadoServer.Delete_Datos_Contacto(aChange: TDADeltaChange); var ASchema : TDASchema; @@ -48,6 +64,16 @@ begin end; end; +function TBizEmpleadoServer.IncrementarReferenciaContacto: Boolean; +begin + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(REF_EMPLEADOS, Self.REFERENCIA) + finally + Free; + end; +end; + procedure TBizEmpleadoServer.Insert_Datos_Contacto(aChange: TDADeltaChange); var ASchema : TDASchema; diff --git a/Source/Modulos/Contactos/Model/uBizProveedoresServer.pas b/Source/Modulos/Contactos/Model/uBizProveedoresServer.pas index f91c580b..92d5426d 100644 --- a/Source/Modulos/Contactos/Model/uBizProveedoresServer.pas +++ b/Source/Modulos/Contactos/Model/uBizProveedoresServer.pas @@ -12,6 +12,9 @@ const type TBizProveedorServer = class(TBizContactosServer) protected + function DarReferenciaContacto : String; override; + function IncrementarReferenciaContacto : Boolean; override; + procedure Insert_Datos_Contacto(aChange: TDADeltaChange); override; procedure Update_Datos_Contacto(aChange: TDADeltaChange); override; procedure Delete_Datos_Contacto(aChange: TDADeltaChange); override; @@ -21,10 +24,23 @@ implementation uses uDataModuleServer, uDAClasses, - schContactosClient_Intf, uBusinessUtils; + schContactosClient_Intf, uBusinessUtils, srvReferencias_Impl; + +const + REF_PROVEEDORES = 'REF_PROVEEDORES'; { TBizProveedorServer } +function TBizProveedorServer.DarReferenciaContacto: String; +begin + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(REF_PROVEEDORES) + finally + Free; + end; +end; + procedure TBizProveedorServer.Delete_Datos_Contacto(aChange: TDADeltaChange); var ASchema : TDASchema; @@ -48,6 +64,16 @@ begin end; end; +function TBizProveedorServer.IncrementarReferenciaContacto: Boolean; +begin + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(REF_PROVEEDORES, Self.REFERENCIA) + finally + Free; + end; +end; + procedure TBizProveedorServer.Insert_Datos_Contacto(aChange: TDADeltaChange); var ASchema : TDASchema; diff --git a/Source/Modulos/Contactos/Servidor/srvContactos_Impl.dfm b/Source/Modulos/Contactos/Servidor/srvContactos_Impl.dfm index 4742c75c..52b7b89c 100644 --- a/Source/Modulos/Contactos/Servidor/srvContactos_Impl.dfm +++ b/Source/Modulos/Contactos/Servidor/srvContactos_Impl.dfm @@ -249,6 +249,7 @@ object srvContactos: TsrvContactos Name = 'REFERENCIA' DataType = datString Size = 255 + ServerAutoRefresh = True DictionaryEntry = 'Contactos_REFERENCIA' end> end @@ -652,6 +653,7 @@ object srvContactos: TsrvContactos Name = 'REFERENCIA' DataType = datString Size = 255 + ServerAutoRefresh = True DictionaryEntry = 'Clientes_REFERENCIA' end item @@ -989,6 +991,7 @@ object srvContactos: TsrvContactos Name = 'REFERENCIA' DataType = datString Size = 255 + ServerAutoRefresh = True DictionaryEntry = 'Proveedores_REFERENCIA' end item @@ -1309,6 +1312,7 @@ object srvContactos: TsrvContactos Name = 'REFERENCIA' DataType = datString Size = 255 + ServerAutoRefresh = True DictionaryEntry = 'Agentes_REFERENCIA' end item @@ -4049,24 +4053,24 @@ object srvContactos: TsrvContactos Top = 82 DiagramData = ''#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' ' + ' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10' '#13#10''#13 + + 'Top="200" Width="400" Height="300">'#13#10' '#13#10' '#13#10' '#13#10' '#13#10''#13 + #10 end object bpContactos: TDABusinessProcessor diff --git a/Source/Modulos/Facturas de cliente/Model/schFacturasClienteClient_Intf.pas b/Source/Modulos/Facturas de cliente/Model/schFacturasClienteClient_Intf.pas index 2d65ae18..38b62538 100644 --- a/Source/Modulos/Facturas de cliente/Model/schFacturasClienteClient_Intf.pas +++ b/Source/Modulos/Facturas de cliente/Model/schFacturasClienteClient_Intf.pas @@ -9,21 +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_DarReferencia = '{CC46C1A7-C6CE-4ABE-B1A8-4C2BABFB5C93}'; - RID_FacturasCliente = '{51E6C07A-D580-46D7-9032-1838AF4D4B07}'; - RID_FacturasCliente_Detalles = '{8A70D0F2-F09E-4166-A792-00012AA7C35A}'; + RID_FacturasCliente = '{95C2DDE4-5EF1-40A4-87CD-E29B422E222D}'; + RID_FacturasCliente_Detalles = '{010F12C4-9C39-4203-B705-9D757B685A11}'; { Data table names } - nme_DarReferencia = 'DarReferencia'; nme_FacturasCliente = 'FacturasCliente'; nme_FacturasCliente_Detalles = 'FacturasCliente_Detalles'; - { DarReferencia fields } - fld_DarReferenciaVALOR = 'VALOR'; - - { DarReferencia field indexes } - idx_DarReferenciaVALOR = 0; - { FacturasCliente fields } fld_FacturasClienteID = 'ID'; fld_FacturasClienteID_EMPRESA = 'ID_EMPRESA'; @@ -127,44 +119,9 @@ const idx_FacturasCliente_DetallesREFERENCIA_PROVEEDOR = 13; type - { IDarReferencia } - IDarReferencia = interface(IDAStronglyTypedDataTable) - ['{3338E715-B18C-4550-BE4C-C92B071770B4}'] - { Property getters and setters } - function GetVALORValue: String; - procedure SetVALORValue(const aValue: String); - function GetVALORIsNull: Boolean; - procedure SetVALORIsNull(const aValue: Boolean); - - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - end; - - { TDarReferenciaDataTableRules } - TDarReferenciaDataTableRules = class(TIntfObjectDADataTableRules, IDarReferencia) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - procedure SetVALORValue(const aValue: String); virtual; - function GetVALORIsNull: Boolean; virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - { IFacturasCliente } IFacturasCliente = interface(IDAStronglyTypedDataTable) - ['{0ACBE344-A040-4AD4-8037-DA9382B4D9CF}'] + ['{F5184C4A-3061-4D25-A4A7-9B93249B7D92}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -583,7 +540,7 @@ type { IFacturasCliente_Detalles } IFacturasCliente_Detalles = interface(IDAStronglyTypedDataTable) - ['{E62E97AD-C08F-4BB6-A6EF-21BF966630A0}'] + ['{777CB660-EDDA-4CEE-9992-604ED4D8A2D7}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -776,39 +733,6 @@ implementation uses Variants, uROBinaryHelpers; -{ TDarReferenciaDataTableRules } -constructor TDarReferenciaDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TDarReferenciaDataTableRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaDataTableRules.GetVALORValue: String; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].AsString; -end; - -procedure TDarReferenciaDataTableRules.SetVALORValue(const aValue: String); -begin - DataTable.Fields[idx_DarReferenciaVALOR].AsString := aValue; -end; - -function TDarReferenciaDataTableRules.GetVALORIsNull: boolean; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].IsNull; -end; - -procedure TDarReferenciaDataTableRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_DarReferenciaVALOR].AsVariant := Null; -end; - - { TFacturasClienteDataTableRules } constructor TFacturasClienteDataTableRules.Create(aDataTable: TDADataTable); var @@ -1828,7 +1752,6 @@ end; initialization - RegisterDataTableRules(RID_DarReferencia, TDarReferenciaDataTableRules); RegisterDataTableRules(RID_FacturasCliente, TFacturasClienteDataTableRules); RegisterDataTableRules(RID_FacturasCliente_Detalles, TFacturasCliente_DetallesDataTableRules); diff --git a/Source/Modulos/Facturas de cliente/Model/schFacturasClienteServer_Intf.pas b/Source/Modulos/Facturas de cliente/Model/schFacturasClienteServer_Intf.pas index 00c491af..c6cb4aef 100644 --- a/Source/Modulos/Facturas de cliente/Model/schFacturasClienteServer_Intf.pas +++ b/Source/Modulos/Facturas de cliente/Model/schFacturasClienteServer_Intf.pas @@ -9,48 +9,13 @@ 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_DarReferenciaDelta = '{E8B8EB94-54CB-49B3-879C-1CF0319BCBBD}'; - RID_FacturasClienteDelta = '{EC7543D0-B0B5-48F9-9401-DEEE0D0BEFF2}'; - RID_FacturasCliente_DetallesDelta = '{A1C5C789-FF93-491C-82C6-A49EF37F27A3}'; + RID_FacturasClienteDelta = '{A8659C85-51C8-44A3-9790-F3A3C50AA03D}'; + RID_FacturasCliente_DetallesDelta = '{BEF54047-703B-4F62-9C73-0F2DB7BF03B4}'; type - { IDarReferenciaDelta } - IDarReferenciaDelta = interface(IDarReferencia) - ['{E8B8EB94-54CB-49B3-879C-1CF0319BCBBD}'] - { Property getters and setters } - function GetOldVALORValue : String; - - { Properties } - property OldVALOR : String read GetOldVALORValue; - end; - - { TDarReferenciaBusinessProcessorRules } - TDarReferenciaBusinessProcessorRules = class(TDABusinessProcessorRules, IDarReferencia, IDarReferenciaDelta) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - function GetVALORIsNull: Boolean; virtual; - function GetOldVALORValue: String; virtual; - function GetOldVALORIsNull: Boolean; virtual; - procedure SetVALORValue(const aValue: String); virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR : String read GetVALORValue write SetVALORValue; - property VALORIsNull : Boolean read GetVALORIsNull write SetVALORIsNull; - property OldVALOR : String read GetOldVALORValue; - property OldVALORIsNull : Boolean read GetOldVALORIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - { IFacturasClienteDelta } IFacturasClienteDelta = interface(IFacturasCliente) - ['{EC7543D0-B0B5-48F9-9401-DEEE0D0BEFF2}'] + ['{A8659C85-51C8-44A3-9790-F3A3C50AA03D}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -469,7 +434,7 @@ type { IFacturasCliente_DetallesDelta } IFacturasCliente_DetallesDelta = interface(IFacturasCliente_Detalles) - ['{A1C5C789-FF93-491C-82C6-A49EF37F27A3}'] + ['{BEF54047-703B-4F62-9C73-0F2DB7BF03B4}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_FACTURAValue : Integer; @@ -662,49 +627,6 @@ implementation uses Variants, uROBinaryHelpers, uDAInterfaces; -{ TDarReferenciaBusinessProcessorRules } -constructor TDarReferenciaBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TDarReferenciaBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]); -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]); -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := aValue; -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := Null; -end; - - { TFacturasClienteBusinessProcessorRules } constructor TFacturasClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); var @@ -2195,7 +2117,6 @@ end; initialization - RegisterBusinessProcessorRules(RID_DarReferenciaDelta, TDarReferenciaBusinessProcessorRules); RegisterBusinessProcessorRules(RID_FacturasClienteDelta, TFacturasClienteBusinessProcessorRules); RegisterBusinessProcessorRules(RID_FacturasCliente_DetallesDelta, TFacturasCliente_DetallesBusinessProcessorRules); diff --git a/Source/Modulos/Facturas de cliente/Model/uBizFacturasClienteServer.pas b/Source/Modulos/Facturas de cliente/Model/uBizFacturasClienteServer.pas index b1c2bcd2..21e5caf0 100644 --- a/Source/Modulos/Facturas de cliente/Model/uBizFacturasClienteServer.pas +++ b/Source/Modulos/Facturas de cliente/Model/uBizFacturasClienteServer.pas @@ -8,80 +8,112 @@ uses const BIZ_SERVER_FACTURAS_CLIENTE = 'Server.FacturasCliente'; - REF_FACTURAS_CLIENTE = 'REF_FACTURAS_CLIENTE'; - REF_ABONOS_CLIENTE = 'REF_ABONOS_CLIENTE'; - CTE_TIPO_ABONO = 'A'; - CTE_TIPO_FACTURA = 'F'; type TBizFacturasClienteServer = class(TFacturasClienteBusinessProcessorRules) + private + FReferenciaAutomatica : Boolean; + function DarReferencia : String; + function IncrementarReferencia : Boolean; protected - procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; + procedure BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); override; + procedure AfterProcessChange(Sender: TDABusinessProcessor; + aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); override; end; implementation uses - Variants, uDAClasses, uReferenciasUtils, uBusinessUtils, uROClasses, uDataModuleServer, - schFacturasClienteClient_Intf; + Variants, uDAClasses, srvReferencias_Impl, uBusinessUtils, uROClasses, + uDataModuleServer, schFacturasClienteClient_Intf; + +const + REF_FACTURAS_CLIENTE = 'REF_FACTURAS_CLIENTE'; + REF_ABONOS_CLIENTE = 'REF_ABONOS_CLIENTE'; + CTE_TIPO_ABONO = 'A'; + CTE_TIPO_FACTURA = 'F'; + { TBizFacturasClienteServer } -procedure TBizFacturasClienteServer.BeforeProcessDelta( - Sender: TDABusinessProcessor; const aDelta: IDADelta); -var - ASchema : TDASchema; - ACurrentConn : IDAConnection; - dsData: IDADataset; - Empresa : Variant; - Tipo : Variant; - +procedure TBizFacturasClienteServer.AfterProcessChange( + Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); begin inherited; + { Por defecto, no es necesario mantener los deltas una vez + procesados los cambios. } + CanRemoveFromDelta := True; + + case aChange.ChangeType of + ctInsert, ctUpdate: begin + if FReferenciaAutomatica then + begin + IncrementarReferencia; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; + end; + end; +end; + +procedure TBizFacturasClienteServer.BeforeProcessDelta( + Sender: TDABusinessProcessor; const aDelta: IDADelta); +begin + FReferenciaAutomatica := False; + case Sender.CurrentChange.ChangeType of ctInsert, ctUpdate: begin //Si la referencia no ha sido asignada le asignamos una nosotros - if (VarIsNull(Sender.CurrentChange.NewValueByName[fld_FacturasClienteREFERENCIA])) - or (VarToStr(Sender.CurrentChange.NewValueByName[fld_FacturasClienteREFERENCIA]) = '') then + if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then begin - ASchema := BusinessProcessor.Schema; - ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); - - try - //Siempre va a estar rellena - Empresa := Sender.CurrentChange.NewValueByName[fld_FacturasClienteID_EMPRESA]; - Tipo := Sender.CurrentChange.NewValueByName[fld_FacturasClienteTIPO]; - - if Tipo = CTE_TIPO_FACTURA then - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [REF_FACTURAS_CLIENTE, Empresa]) - else - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [REF_ABONOS_CLIENTE, Empresa]); - - except - RaiseError('No existe la tabla REFERENCIAS'); - end; - - dsData.Active := True; - - if dsData.IsEmpty then - RaiseError('NO HAY REFERENCIA ' + REF_FACTURAS_CLIENTE + ' / ' + REF_ABONOS_CLIENTE + ' DECLARADA EN TABLA REFERENCIAS'); - - REFERENCIA := dsData.FieldByName('VALOR').AsString; - - try - if Tipo = CTE_TIPO_FACTURA then - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'EMPRESA'], [REF_FACTURAS_CLIENTE, DarReferenciaSiguiente(REFERENCIA), Empresa]) - else - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'EMPRESA'], [REF_ABONOS_CLIENTE, DarReferenciaSiguiente(REFERENCIA), Empresa]); - - except - RaiseError('Error al asignar la nueva ' + REFERENCIA + ' referencia en tabla'); - end; + FReferenciaAutomatica := True; + REFERENCIA := DarReferencia; end; end; end; end; +function TBizFacturasClienteServer.DarReferencia: String; +var + ATipo : String; +begin + if TIPO = CTE_TIPO_FACTURA then + ATipo := REF_FACTURAS_CLIENTE + else + ATipo := REF_ABONOS_CLIENTE; + + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(ATipo, ID_EMPRESA) + finally + Free; + end; +end; + +function TBizFacturasClienteServer.IncrementarReferencia: Boolean; +var + ATipo : String; +begin + if TIPO = CTE_TIPO_FACTURA then + ATipo := REF_FACTURAS_CLIENTE + else + ATipo := REF_ABONOS_CLIENTE; + + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(ATipo, + Self.REFERENCIA, ID_EMPRESA) + finally + Free; + end; +end; + initialization RegisterBusinessProcessorRules(BIZ_SERVER_FACTURAS_CLIENTE, TBizFacturasClienteServer); diff --git a/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.dfm b/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.dfm index 14f3e134..f85f9f12 100644 --- a/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.dfm +++ b/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.dfm @@ -15,42 +15,6 @@ object srvFacturasCliente: TsrvFacturasCliente DataDictionary = DataDictionary Diagrams = Diagrams Datasets = < - item - Params = < - item - Name = 'CODIGO' - DataType = datString - Size = 50 - Value = '' - ParamType = daptInput - end - item - Name = 'EMPRESA' - Value = '' - ParamType = daptInput - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'SELECT VALOR'#10'FROM REFERENCIAS'#10'WHERE CODIGO = :CODIGO'#10'AND ID_EMPR' + - 'ESA = :EMPRESA' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'VALOR' - TableField = 'VALOR' - end> - end> - Name = 'DarReferencia' - Fields = < - item - Name = 'VALOR' - DataType = datString - Size = 255 - end> - end item Params = <> Statements = < @@ -534,31 +498,6 @@ object srvFacturasCliente: TsrvFacturasCliente JoinDataTables = <> UnionDataTables = <> Commands = < - item - Params = < - item - Name = 'VALOR' - Value = '' - end - item - Name = 'CODIGO' - Value = '' - end - item - Name = 'EMPRESA' - Value = '' - end> - Statements = < - item - Connection = 'IBX' - SQL = - 'UPDATE REFERENCIAS SET'#10' VALOR = :VALOR'#10'WHERE CODIGO = :COD' + - 'IGO AND'#10' ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'ModificarReferencia' - end item Params = < item diff --git a/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorClient_Intf.pas b/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorClient_Intf.pas index af4442ac..716422eb 100644 --- a/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorClient_Intf.pas +++ b/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorClient_Intf.pas @@ -9,21 +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_DarReferencia = '{5C2671F2-30A9-40DF-85EB-DAC3E5798C81}'; - RID_FacturasProveedor = '{EB88CFA6-A4F3-44A5-99AC-CEEF636BBC0F}'; - RID_FacturasProveedor_Detalles = '{794BFE28-FCFA-451E-809D-4B3204729DB8}'; + RID_FacturasProveedor = '{88E29988-90B3-4F11-BDD5-725B135C5155}'; + RID_FacturasProveedor_Detalles = '{B8192582-A958-4BCC-A261-5608584C2B67}'; { Data table names } - nme_DarReferencia = 'DarReferencia'; nme_FacturasProveedor = 'FacturasProveedor'; nme_FacturasProveedor_Detalles = 'FacturasProveedor_Detalles'; - { DarReferencia fields } - fld_DarReferenciaVALOR = 'VALOR'; - - { DarReferencia field indexes } - idx_DarReferenciaVALOR = 0; - { FacturasProveedor fields } fld_FacturasProveedorID = 'ID'; fld_FacturasProveedorID_EMPRESA = 'ID_EMPRESA'; @@ -123,44 +115,9 @@ const idx_FacturasProveedor_DetallesREFERENCIA_PROVEEDOR = 13; type - { IDarReferencia } - IDarReferencia = interface(IDAStronglyTypedDataTable) - ['{2CD8615C-AC9E-463D-A28B-9DF7EA71C261}'] - { Property getters and setters } - function GetVALORValue: String; - procedure SetVALORValue(const aValue: String); - function GetVALORIsNull: Boolean; - procedure SetVALORIsNull(const aValue: Boolean); - - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - end; - - { TDarReferenciaDataTableRules } - TDarReferenciaDataTableRules = class(TIntfObjectDADataTableRules, IDarReferencia) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - procedure SetVALORValue(const aValue: String); virtual; - function GetVALORIsNull: Boolean; virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - { IFacturasProveedor } IFacturasProveedor = interface(IDAStronglyTypedDataTable) - ['{19ADA8D8-BA53-426F-9AFA-700B29166843}'] + ['{E152D3B2-9282-492A-8E11-DDBE597C9FB1}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -555,7 +512,7 @@ type { IFacturasProveedor_Detalles } IFacturasProveedor_Detalles = interface(IDAStronglyTypedDataTable) - ['{8C420A12-5489-4872-A3A6-9DE83225D778}'] + ['{97403572-2108-4BF9-BD7B-4359FD2F8C8D}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -748,39 +705,6 @@ implementation uses Variants, uROBinaryHelpers; -{ TDarReferenciaDataTableRules } -constructor TDarReferenciaDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TDarReferenciaDataTableRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaDataTableRules.GetVALORValue: String; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].AsString; -end; - -procedure TDarReferenciaDataTableRules.SetVALORValue(const aValue: String); -begin - DataTable.Fields[idx_DarReferenciaVALOR].AsString := aValue; -end; - -function TDarReferenciaDataTableRules.GetVALORIsNull: boolean; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].IsNull; -end; - -procedure TDarReferenciaDataTableRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_DarReferenciaVALOR].AsVariant := Null; -end; - - { TFacturasProveedorDataTableRules } constructor TFacturasProveedorDataTableRules.Create(aDataTable: TDADataTable); var @@ -1758,7 +1682,6 @@ end; initialization - RegisterDataTableRules(RID_DarReferencia, TDarReferenciaDataTableRules); RegisterDataTableRules(RID_FacturasProveedor, TFacturasProveedorDataTableRules); RegisterDataTableRules(RID_FacturasProveedor_Detalles, TFacturasProveedor_DetallesDataTableRules); diff --git a/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorServer_Intf.pas b/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorServer_Intf.pas index 19f97ec2..371391ed 100644 --- a/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorServer_Intf.pas +++ b/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorServer_Intf.pas @@ -9,48 +9,13 @@ 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_DarReferenciaDelta = '{29799EE8-6169-4A26-9C4C-02C33D658D97}'; - RID_FacturasProveedorDelta = '{90E2FE05-93D9-4478-B54E-73618BD635BF}'; - RID_FacturasProveedor_DetallesDelta = '{9215693E-0AA6-46A8-AD7B-3EAE75F51EFE}'; + RID_FacturasProveedorDelta = '{E53CF4C8-D5FB-42BC-AA69-3E77733F61F0}'; + RID_FacturasProveedor_DetallesDelta = '{6CC27603-B23C-40C4-9D22-8CFC5E1B738F}'; type - { IDarReferenciaDelta } - IDarReferenciaDelta = interface(IDarReferencia) - ['{29799EE8-6169-4A26-9C4C-02C33D658D97}'] - { Property getters and setters } - function GetOldVALORValue : String; - - { Properties } - property OldVALOR : String read GetOldVALORValue; - end; - - { TDarReferenciaBusinessProcessorRules } - TDarReferenciaBusinessProcessorRules = class(TDABusinessProcessorRules, IDarReferencia, IDarReferenciaDelta) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - function GetVALORIsNull: Boolean; virtual; - function GetOldVALORValue: String; virtual; - function GetOldVALORIsNull: Boolean; virtual; - procedure SetVALORValue(const aValue: String); virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR : String read GetVALORValue write SetVALORValue; - property VALORIsNull : Boolean read GetVALORIsNull write SetVALORIsNull; - property OldVALOR : String read GetOldVALORValue; - property OldVALORIsNull : Boolean read GetOldVALORIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - { IFacturasProveedorDelta } IFacturasProveedorDelta = interface(IFacturasProveedor) - ['{90E2FE05-93D9-4478-B54E-73618BD635BF}'] + ['{E53CF4C8-D5FB-42BC-AA69-3E77733F61F0}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -445,7 +410,7 @@ type { IFacturasProveedor_DetallesDelta } IFacturasProveedor_DetallesDelta = interface(IFacturasProveedor_Detalles) - ['{9215693E-0AA6-46A8-AD7B-3EAE75F51EFE}'] + ['{6CC27603-B23C-40C4-9D22-8CFC5E1B738F}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_FACTURAValue : Integer; @@ -638,49 +603,6 @@ implementation uses Variants, uROBinaryHelpers, uDAInterfaces; -{ TDarReferenciaBusinessProcessorRules } -constructor TDarReferenciaBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TDarReferenciaBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]); -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]); -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := aValue; -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := Null; -end; - - { TFacturasProveedorBusinessProcessorRules } constructor TFacturasProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); var @@ -2109,7 +2031,6 @@ end; initialization - RegisterBusinessProcessorRules(RID_DarReferenciaDelta, TDarReferenciaBusinessProcessorRules); RegisterBusinessProcessorRules(RID_FacturasProveedorDelta, TFacturasProveedorBusinessProcessorRules); RegisterBusinessProcessorRules(RID_FacturasProveedor_DetallesDelta, TFacturasProveedor_DetallesBusinessProcessorRules); diff --git a/Source/Modulos/Facturas de proveedor/Model/uBizFacturasProveedorServer.pas b/Source/Modulos/Facturas de proveedor/Model/uBizFacturasProveedorServer.pas index 1a28edd4..780f2d00 100644 --- a/Source/Modulos/Facturas de proveedor/Model/uBizFacturasProveedorServer.pas +++ b/Source/Modulos/Facturas de proveedor/Model/uBizFacturasProveedorServer.pas @@ -8,80 +8,112 @@ uses const BIZ_SERVER_FACTURAS_PROVEEDOR = 'Server.FacturasProveedor'; - REF_FACTURAS_PROVEEDOR = 'REF_FACTURAS_PROVEEDOR'; - REF_ABONOS_PROVEEDOR = 'REF_ABONOS_PROVEEDOR'; - CTE_TIPO_ABONO = 'A'; - CTE_TIPO_FACTURA = 'F'; type TBizFacturasProveedorServer = class(TFacturasProveedorBusinessProcessorRules) + private + FReferenciaAutomatica : Boolean; + function DarReferencia : String; + function IncrementarReferencia : Boolean; protected - procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; + procedure BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); override; + procedure AfterProcessChange(Sender: TDABusinessProcessor; + aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); override; end; implementation uses Variants, uDAClasses, uReferenciasUtils, uBusinessUtils, uROClasses, uDataModuleServer, - schFacturasProveedorClient_Intf; + schFacturasProveedorClient_Intf, srvReferencias_Impl; + +const + REF_FACTURAS_PROVEEDOR = 'REF_FACTURAS_PROVEEDOR'; + REF_ABONOS_PROVEEDOR = 'REF_ABONOS_PROVEEDOR'; + CTE_TIPO_ABONO = 'A'; + CTE_TIPO_FACTURA = 'F'; + { TBizFacturasProveedorServer } -procedure TBizFacturasProveedorServer.BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); -var - ASchema : TDASchema; - ACurrentConn : IDAConnection; - dsData: IDADataset; - Empresa : Variant; - Tipo : Variant; - +procedure TBizFacturasProveedorServer.AfterProcessChange( + Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); begin inherited; + { Por defecto, no es necesario mantener los deltas una vez + procesados los cambios. } + CanRemoveFromDelta := True; + + case aChange.ChangeType of + ctInsert, ctUpdate: begin + if FReferenciaAutomatica then + begin + IncrementarReferencia; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; + end; + end; +end; + +procedure TBizFacturasProveedorServer.BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); +begin + FReferenciaAutomatica := False; + case Sender.CurrentChange.ChangeType of ctInsert, ctUpdate: begin //Si la referencia no ha sido asignada le asignamos una nosotros - if (VarIsNull(Sender.CurrentChange.NewValueByName[fld_FacturasProveedorREFERENCIA])) - or (VarToStr(Sender.CurrentChange.NewValueByName[fld_FacturasProveedorREFERENCIA]) = '') then + if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then begin - ASchema := BusinessProcessor.Schema; - ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); - - try - //Siempre va a estar rellena - Empresa := Sender.CurrentChange.NewValueByName[fld_FacturasProveedorID_EMPRESA]; - Tipo := Sender.CurrentChange.NewValueByName[fld_FacturasProveedorTIPO]; - - if Tipo = CTE_TIPO_FACTURA then - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [REF_FACTURAS_PROVEEDOR, Empresa]) - else - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [REF_ABONOS_PROVEEDOR, Empresa]); - - except - RaiseError('No existe la tabla REFERENCIAS'); - end; - - dsData.Active := True; - - if dsData.IsEmpty then - RaiseError('NO HAY REFERENCIA ' + REF_FACTURAS_PROVEEDOR + ' / ' + REF_ABONOS_PROVEEDOR + ' DECLARADA EN TABLA REFERENCIAS'); - - REFERENCIA := dsData.FieldByName('VALOR').AsString; - - try - if Tipo = CTE_TIPO_FACTURA then - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'EMPRESA'], [REF_FACTURAS_PROVEEDOR, DarReferenciaSiguiente(REFERENCIA), Empresa]) - else - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'EMPRESA'], [REF_ABONOS_PROVEEDOR, DarReferenciaSiguiente(REFERENCIA), Empresa]); - - except - RaiseError('Error al asignar la nueva ' + REFERENCIA + ' referencia en tabla'); - end; + FReferenciaAutomatica := True; + REFERENCIA := DarReferencia; end; end; end; end; +function TBizFacturasProveedorServer.DarReferencia: String; +var + ATipo : String; +begin + if TIPO = CTE_TIPO_FACTURA then + ATipo := REF_FACTURAS_PROVEEDOR + else + ATipo := REF_ABONOS_PROVEEDOR; + + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(ATipo, ID_EMPRESA) + finally + Free; + end; +end; + +function TBizFacturasProveedorServer.IncrementarReferencia: Boolean; +var + ATipo : String; +begin + if TIPO = CTE_TIPO_FACTURA then + ATipo := REF_FACTURAS_PROVEEDOR + else + ATipo := REF_ABONOS_PROVEEDOR; + + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(ATipo, + Self.REFERENCIA, ID_EMPRESA) + finally + Free; + end; +end; + initialization RegisterBusinessProcessorRules(BIZ_SERVER_FACTURAS_PROVEEDOR, TBizFacturasProveedorServer); diff --git a/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.dfm b/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.dfm index 7a90cfb2..579b735e 100644 --- a/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.dfm +++ b/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.dfm @@ -15,42 +15,6 @@ object srvFacturasProveedor: TsrvFacturasProveedor DataDictionary = DataDictionary Diagrams = Diagrams Datasets = < - item - Params = < - item - Name = 'CODIGO' - DataType = datString - Size = 50 - Value = '' - ParamType = daptInput - end - item - Name = 'EMPRESA' - Value = '' - ParamType = daptInput - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'SELECT VALOR'#10'FROM REFERENCIAS'#10'WHERE CODIGO = :CODIGO'#10'AND ID_EMPR' + - 'ESA = :EMPRESA' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'VALOR' - TableField = 'VALOR' - end> - end> - Name = 'DarReferencia' - Fields = < - item - Name = 'VALOR' - DataType = datString - Size = 255 - end> - end item Params = <> Statements = < @@ -519,31 +483,6 @@ object srvFacturasProveedor: TsrvFacturasProveedor JoinDataTables = <> UnionDataTables = <> Commands = < - item - Params = < - item - Name = 'VALOR' - Value = '' - end - item - Name = 'CODIGO' - Value = '' - end - item - Name = 'EMPRESA' - Value = '' - end> - Statements = < - item - Connection = 'IBX' - SQL = - 'UPDATE REFERENCIAS SET'#10' VALOR = :VALOR'#10'WHERE CODIGO = :COD' + - 'IGO AND'#10' ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'ModificarReferencia' - end item Params = < item diff --git a/Source/Modulos/Pedidos a proveedor/Model/schPedidosProveedorClient_Intf.pas b/Source/Modulos/Pedidos a proveedor/Model/schPedidosProveedorClient_Intf.pas index eabb8b47..03ef4eb2 100644 --- a/Source/Modulos/Pedidos a proveedor/Model/schPedidosProveedorClient_Intf.pas +++ b/Source/Modulos/Pedidos a proveedor/Model/schPedidosProveedorClient_Intf.pas @@ -9,23 +9,15 @@ 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_DarReferencia = '{CA7994DB-6CC3-4494-8CDA-4D8411DB5D2D}'; - RID_PedidosProveedor = '{684C5776-911B-490A-9C71-D4EDCCAD631E}'; - RID_PedidosProveedor_Detalles = '{FCF3DE95-4073-4679-92C0-87B7E7C46108}'; - RID_PedidosProveedor_Articulos_Pendientes = '{EA978B2E-441A-49F8-AF4D-76517D74CF10}'; + RID_PedidosProveedor = '{58DE490F-21E7-46A0-8553-F18015CAF07E}'; + RID_PedidosProveedor_Detalles = '{1F8FEB94-42A3-4DC3-BB9B-33D96BAB6B5E}'; + RID_PedidosProveedor_Articulos_Pendientes = '{0864581D-D5D3-441D-9296-22C2CFB6DE3B}'; { Data table names } - nme_DarReferencia = 'DarReferencia'; nme_PedidosProveedor = 'PedidosProveedor'; nme_PedidosProveedor_Detalles = 'PedidosProveedor_Detalles'; nme_PedidosProveedor_Articulos_Pendientes = 'PedidosProveedor_Articulos_Pendientes'; - { DarReferencia fields } - fld_DarReferenciaVALOR = 'VALOR'; - - { DarReferencia field indexes } - idx_DarReferenciaVALOR = 0; - { PedidosProveedor fields } fld_PedidosProveedorID = 'ID'; fld_PedidosProveedorID_EMPRESA = 'ID_EMPRESA'; @@ -149,44 +141,9 @@ const idx_PedidosProveedor_Articulos_PendientesREFERENCIA_PROVEEDOR = 5; type - { IDarReferencia } - IDarReferencia = interface(IDAStronglyTypedDataTable) - ['{04456888-5D38-48BB-8CED-95617D1F2BB9}'] - { Property getters and setters } - function GetVALORValue: String; - procedure SetVALORValue(const aValue: String); - function GetVALORIsNull: Boolean; - procedure SetVALORIsNull(const aValue: Boolean); - - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - end; - - { TDarReferenciaDataTableRules } - TDarReferenciaDataTableRules = class(TIntfObjectDADataTableRules, IDarReferencia) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - procedure SetVALORValue(const aValue: String); virtual; - function GetVALORIsNull: Boolean; virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - { IPedidosProveedor } IPedidosProveedor = interface(IDAStronglyTypedDataTable) - ['{4E3D9B42-CF76-460B-8136-2D0C2B3417D4}'] + ['{045CE31C-5F13-4365-94D8-09C247E0B609}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -629,7 +586,7 @@ type { IPedidosProveedor_Detalles } IPedidosProveedor_Detalles = interface(IDAStronglyTypedDataTable) - ['{127BE3FD-DEF4-4C58-ABC5-5A54DCE0608D}'] + ['{10B7129B-0AD0-476C-AA42-807F150AA7B3}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -820,7 +777,7 @@ type { IPedidosProveedor_Articulos_Pendientes } IPedidosProveedor_Articulos_Pendientes = interface(IDAStronglyTypedDataTable) - ['{34BDDF31-970F-4F58-923B-1C0E66F27A5F}'] + ['{0F474AE2-91D1-4747-B9B7-3825145A2CE3}'] { Property getters and setters } function GetID_PEDIDOValue: Integer; procedure SetID_PEDIDOValue(const aValue: Integer); @@ -917,39 +874,6 @@ implementation uses Variants, uROBinaryHelpers; -{ TDarReferenciaDataTableRules } -constructor TDarReferenciaDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TDarReferenciaDataTableRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaDataTableRules.GetVALORValue: String; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].AsString; -end; - -procedure TDarReferenciaDataTableRules.SetVALORValue(const aValue: String); -begin - DataTable.Fields[idx_DarReferenciaVALOR].AsString := aValue; -end; - -function TDarReferenciaDataTableRules.GetVALORIsNull: boolean; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].IsNull; -end; - -procedure TDarReferenciaDataTableRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_DarReferenciaVALOR].AsVariant := Null; -end; - - { TPedidosProveedorDataTableRules } constructor TPedidosProveedorDataTableRules.Create(aDataTable: TDADataTable); var @@ -2154,7 +2078,6 @@ end; initialization - RegisterDataTableRules(RID_DarReferencia, TDarReferenciaDataTableRules); RegisterDataTableRules(RID_PedidosProveedor, TPedidosProveedorDataTableRules); RegisterDataTableRules(RID_PedidosProveedor_Detalles, TPedidosProveedor_DetallesDataTableRules); RegisterDataTableRules(RID_PedidosProveedor_Articulos_Pendientes, TPedidosProveedor_Articulos_PendientesDataTableRules); diff --git a/Source/Modulos/Pedidos a proveedor/Model/schPedidosProveedorServer_Intf.pas b/Source/Modulos/Pedidos a proveedor/Model/schPedidosProveedorServer_Intf.pas index 662cc9b0..b2a6d50d 100644 --- a/Source/Modulos/Pedidos a proveedor/Model/schPedidosProveedorServer_Intf.pas +++ b/Source/Modulos/Pedidos a proveedor/Model/schPedidosProveedorServer_Intf.pas @@ -9,49 +9,14 @@ const { Delta rules ids Feel free to change them to something more human readable but make sure they are unique in the context of your application } - RID_DarReferenciaDelta = '{A1F1C534-FD91-42C1-856B-0CAE9DE48B68}'; - RID_PedidosProveedorDelta = '{349D50BE-57FD-468A-8751-0374A571AAA4}'; - RID_PedidosProveedor_DetallesDelta = '{E924668B-8D1B-44C3-9DA2-D033F8C44E06}'; - RID_PedidosProveedor_Articulos_PendientesDelta = '{0B859C3A-9F82-4451-A206-24CEF18A61E9}'; + RID_PedidosProveedorDelta = '{6B35580D-7178-4FFA-B9D7-5267221E9EC2}'; + RID_PedidosProveedor_DetallesDelta = '{D3FC4AC8-B811-4DEF-B9E5-7EDF82012F3D}'; + RID_PedidosProveedor_Articulos_PendientesDelta = '{CACE01FB-F88B-48FB-9693-CF3432BAF0D6}'; type - { IDarReferenciaDelta } - IDarReferenciaDelta = interface(IDarReferencia) - ['{A1F1C534-FD91-42C1-856B-0CAE9DE48B68}'] - { Property getters and setters } - function GetOldVALORValue : String; - - { Properties } - property OldVALOR : String read GetOldVALORValue; - end; - - { TDarReferenciaBusinessProcessorRules } - TDarReferenciaBusinessProcessorRules = class(TDABusinessProcessorRules, IDarReferencia, IDarReferenciaDelta) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - function GetVALORIsNull: Boolean; virtual; - function GetOldVALORValue: String; virtual; - function GetOldVALORIsNull: Boolean; virtual; - procedure SetVALORValue(const aValue: String); virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR : String read GetVALORValue write SetVALORValue; - property VALORIsNull : Boolean read GetVALORIsNull write SetVALORIsNull; - property OldVALOR : String read GetOldVALORValue; - property OldVALORIsNull : Boolean read GetOldVALORIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - { IPedidosProveedorDelta } IPedidosProveedorDelta = interface(IPedidosProveedor) - ['{349D50BE-57FD-468A-8751-0374A571AAA4}'] + ['{6B35580D-7178-4FFA-B9D7-5267221E9EC2}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -495,7 +460,7 @@ type { IPedidosProveedor_DetallesDelta } IPedidosProveedor_DetallesDelta = interface(IPedidosProveedor_Detalles) - ['{E924668B-8D1B-44C3-9DA2-D033F8C44E06}'] + ['{D3FC4AC8-B811-4DEF-B9E5-7EDF82012F3D}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_PEDIDOValue : Integer; @@ -685,7 +650,7 @@ type { IPedidosProveedor_Articulos_PendientesDelta } IPedidosProveedor_Articulos_PendientesDelta = interface(IPedidosProveedor_Articulos_Pendientes) - ['{0B859C3A-9F82-4451-A206-24CEF18A61E9}'] + ['{CACE01FB-F88B-48FB-9693-CF3432BAF0D6}'] { Property getters and setters } function GetOldID_PEDIDOValue : Integer; function GetOldREFERENCIAValue : String; @@ -782,49 +747,6 @@ implementation uses Variants, uROBinaryHelpers, uDAInterfaces; -{ TDarReferenciaBusinessProcessorRules } -constructor TDarReferenciaBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TDarReferenciaBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]); -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]); -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := aValue; -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := Null; -end; - - { TPedidosProveedorBusinessProcessorRules } constructor TPedidosProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); var @@ -2581,7 +2503,6 @@ end; initialization - RegisterBusinessProcessorRules(RID_DarReferenciaDelta, TDarReferenciaBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PedidosProveedorDelta, TPedidosProveedorBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PedidosProveedor_DetallesDelta, TPedidosProveedor_DetallesBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PedidosProveedor_Articulos_PendientesDelta, TPedidosProveedor_Articulos_PendientesBusinessProcessorRules); diff --git a/Source/Modulos/Pedidos a proveedor/Model/uBizPedidosProveedorServer.pas b/Source/Modulos/Pedidos a proveedor/Model/uBizPedidosProveedorServer.pas index 5c128d8e..dad96e76 100644 --- a/Source/Modulos/Pedidos a proveedor/Model/uBizPedidosProveedorServer.pas +++ b/Source/Modulos/Pedidos a proveedor/Model/uBizPedidosProveedorServer.pas @@ -8,67 +8,95 @@ uses const BIZ_SERVER_PEDIDOS_PROVEEDOR = 'Server.PedidosProveedor'; - REF_PEDIDOS_PROVEEDOR = 'REF_PEDIDOS_PROVEEDOR'; type TBizPedidosProveedorServer = class(TPedidosProveedorBusinessProcessorRules) + private + FReferenciaAutomatica : Boolean; + function DarReferencia : String; + function IncrementarReferencia : Boolean; protected - procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; + procedure BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); override; + procedure AfterProcessChange(Sender: TDABusinessProcessor; + aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); override; end; implementation uses Variants, uDAClasses, uReferenciasUtils, uBusinessUtils, uROClasses, uDataModuleServer, - schPedidosProveedorClient_Intf; + schPedidosProveedorClient_Intf, srvReferencias_Impl; + +const + REF_PEDIDOS_PROVEEDOR = 'REF_PEDIDOS_PROVEEDOR'; + { TBizPedidosProveedorServer } -procedure TBizPedidosProveedorServer.BeforeProcessDelta( - Sender: TDABusinessProcessor; const aDelta: IDADelta); -var - ASchema : TDASchema; - ACurrentConn : IDAConnection; - dsData: IDADataset; - Empresa : Variant; - +procedure TBizPedidosProveedorServer.AfterProcessChange( + Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); begin inherited; + { Por defecto, no es necesario mantener los deltas una vez + procesados los cambios. } + CanRemoveFromDelta := True; + + case aChange.ChangeType of + ctInsert, ctUpdate: begin + if FReferenciaAutomatica then + begin + IncrementarReferencia; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; + end; + end; +end; + +procedure TBizPedidosProveedorServer.BeforeProcessDelta( + Sender: TDABusinessProcessor; const aDelta: IDADelta); +begin + FReferenciaAutomatica := False; + case Sender.CurrentChange.ChangeType of ctInsert, ctUpdate: begin //Si la referencia no ha sido asignada le asignamos una nosotros - if (VarIsNull(Sender.CurrentChange.NewValueByName[fld_PedidosProveedorREFERENCIA])) - or (VarToStr(Sender.CurrentChange.NewValueByName[fld_PedidosProveedorREFERENCIA]) = '') then + if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then begin - ASchema := BusinessProcessor.Schema; - ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); - - try - //Siempre va a estar rellena - Empresa := Sender.CurrentChange.NewValueByName[fld_PedidosProveedorID_EMPRESA]; - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [REF_PEDIDOS_PROVEEDOR, Empresa]); - except - RaiseError('No existe la tabla REFERENCIAS'); - end; - - dsData.Active := True; - - if dsData.IsEmpty then - RaiseError('NO HAY REFERENCIA ' + REF_PEDIDOS_PROVEEDOR + ' DECLARADA EN TABLA REFERENCIAS'); - - REFERENCIA := dsData.FieldByName(fld_DarReferenciaVALOR).AsString; - - try - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'EMPRESA'], [REF_PEDIDOS_PROVEEDOR, DarReferenciaSiguiente(REFERENCIA), Empresa]); - except - RaiseError('Error al asignar la nueva ' + REFERENCIA + ' referencia en tabla'); - end; - + FReferenciaAutomatica := True; + REFERENCIA := DarReferencia; end; end; end; end; +function TBizPedidosProveedorServer.DarReferencia: String; +begin + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(REF_PEDIDOS_PROVEEDOR, ID_EMPRESA) + finally + Free; + end; +end; + +function TBizPedidosProveedorServer.IncrementarReferencia: Boolean; +begin + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(REF_PEDIDOS_PROVEEDOR, + Self.REFERENCIA, ID_EMPRESA) + finally + Free; + end; +end; + initialization RegisterBusinessProcessorRules(BIZ_SERVER_PEDIDOS_PROVEEDOR, TBizPedidosProveedorServer); diff --git a/Source/Modulos/Pedidos a proveedor/Servidor/srvPedidosProveedor_Impl.dfm b/Source/Modulos/Pedidos a proveedor/Servidor/srvPedidosProveedor_Impl.dfm index aab23622..6de36cf8 100644 --- a/Source/Modulos/Pedidos a proveedor/Servidor/srvPedidosProveedor_Impl.dfm +++ b/Source/Modulos/Pedidos a proveedor/Servidor/srvPedidosProveedor_Impl.dfm @@ -14,40 +14,6 @@ object srvPedidosProveedor: TsrvPedidosProveedor ConnectionManager = dmServer.ConnectionManager DataDictionary = DADataDictionary Datasets = < - item - Params = < - item - Name = 'CODIGO' - Value = '' - ParamType = daptInput - end - item - Name = 'EMPRESA' - Value = '' - ParamType = daptInput - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'SELECT'#10' VALOR'#10'FROM'#10' REFERENCIAS'#10'WHERE'#10' CODIGO = :COD' + - 'IGO'#10'AND ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'VALOR' - TableField = 'VALOR' - end> - end> - Name = 'DarReferencia' - Fields = < - item - Name = 'VALOR' - DataType = datString - Size = 255 - end> - end item Params = <> Statements = < @@ -619,32 +585,6 @@ object srvPedidosProveedor: TsrvPedidosProveedor JoinDataTables = <> UnionDataTables = <> Commands = < - item - Params = < - item - Name = 'VALOR' - Value = '' - end - item - Name = 'CODIGO' - Value = '' - end - item - Name = 'EMPRESA' - Value = '' - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'UPDATE REFERENCIAS SET'#10' VALOR = :VALOR'#10'WHERE CODIGO = :COD' + - 'IGO AND'#10' ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'ModificarReferencia' - end item Params = < item diff --git a/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteClient_Intf.pas b/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteClient_Intf.pas index bad4852d..f6c27602 100644 --- a/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteClient_Intf.pas +++ b/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteClient_Intf.pas @@ -9,21 +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_DarReferencia = '{6594B31A-A292-486E-A784-AF4659E1A953}'; - RID_PresupuestosCliente = '{13857C95-50E8-4EF5-8544-ABFCE393A83E}'; - RID_PresupuestosCliente_Detalles = '{FE4E1E48-710A-404F-B2DD-4547549B420D}'; + RID_PresupuestosCliente = '{07B92F91-B78B-48C3-A022-A9DFF963F681}'; + RID_PresupuestosCliente_Detalles = '{52E490B1-0AFF-4BBA-BA6A-CF8B547AFC33}'; { Data table names } - nme_DarReferencia = 'DarReferencia'; nme_PresupuestosCliente = 'PresupuestosCliente'; nme_PresupuestosCliente_Detalles = 'PresupuestosCliente_Detalles'; - { DarReferencia fields } - fld_DarReferenciaVALOR = 'VALOR'; - - { DarReferencia field indexes } - idx_DarReferenciaVALOR = 0; - { PresupuestosCliente fields } fld_PresupuestosClienteID = 'ID'; fld_PresupuestosClienteID_EMPRESA = 'ID_EMPRESA'; @@ -117,44 +109,9 @@ const idx_PresupuestosCliente_DetallesREFERENCIA_PROVEEDOR = 13; type - { IDarReferencia } - IDarReferencia = interface(IDAStronglyTypedDataTable) - ['{D7753D57-71A2-4C4D-A580-8D58520FCFD3}'] - { Property getters and setters } - function GetVALORValue: String; - procedure SetVALORValue(const aValue: String); - function GetVALORIsNull: Boolean; - procedure SetVALORIsNull(const aValue: Boolean); - - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - end; - - { TDarReferenciaDataTableRules } - TDarReferenciaDataTableRules = class(TIntfObjectDADataTableRules, IDarReferencia) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - procedure SetVALORValue(const aValue: String); virtual; - function GetVALORIsNull: Boolean; virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - { IPresupuestosCliente } IPresupuestosCliente = interface(IDAStronglyTypedDataTable) - ['{4FCC9A5F-7A94-4A3A-940A-4CA0D4176EDB}'] + ['{89129FA5-5437-4FC5-A5F5-C5B6D0E115B1}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -513,7 +470,7 @@ type { IPresupuestosCliente_Detalles } IPresupuestosCliente_Detalles = interface(IDAStronglyTypedDataTable) - ['{5B7F200F-3962-455D-98BB-A24DE98BD18B}'] + ['{5037407C-23C9-4C3D-A12B-66E966AAEB3A}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -706,39 +663,6 @@ implementation uses Variants, uROBinaryHelpers; -{ TDarReferenciaDataTableRules } -constructor TDarReferenciaDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TDarReferenciaDataTableRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaDataTableRules.GetVALORValue: String; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].AsString; -end; - -procedure TDarReferenciaDataTableRules.SetVALORValue(const aValue: String); -begin - DataTable.Fields[idx_DarReferenciaVALOR].AsString := aValue; -end; - -function TDarReferenciaDataTableRules.GetVALORIsNull: boolean; -begin - result := DataTable.Fields[idx_DarReferenciaVALOR].IsNull; -end; - -procedure TDarReferenciaDataTableRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_DarReferenciaVALOR].AsVariant := Null; -end; - - { TPresupuestosClienteDataTableRules } constructor TPresupuestosClienteDataTableRules.Create(aDataTable: TDADataTable); var @@ -1668,7 +1592,6 @@ end; initialization - RegisterDataTableRules(RID_DarReferencia, TDarReferenciaDataTableRules); RegisterDataTableRules(RID_PresupuestosCliente, TPresupuestosClienteDataTableRules); RegisterDataTableRules(RID_PresupuestosCliente_Detalles, TPresupuestosCliente_DetallesDataTableRules); diff --git a/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteServer_Intf.pas b/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteServer_Intf.pas index d13a8bcd..a18ff859 100644 --- a/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteServer_Intf.pas +++ b/Source/Modulos/Presupuestos de cliente/Model/schPresupuestosClienteServer_Intf.pas @@ -9,48 +9,13 @@ 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_DarReferenciaDelta = '{0B34135E-0FB6-4CBA-AF23-A26B88542C10}'; - RID_PresupuestosClienteDelta = '{847B43BF-5186-406F-92E6-2135D35EF01F}'; - RID_PresupuestosCliente_DetallesDelta = '{1DA22D38-0DB5-450C-AF43-3F7F4D2EA56E}'; + RID_PresupuestosClienteDelta = '{33FBE0A4-6909-4581-81D2-E8717839296B}'; + RID_PresupuestosCliente_DetallesDelta = '{F84CCA1D-138D-4516-818D-EE1757D249B1}'; type - { IDarReferenciaDelta } - IDarReferenciaDelta = interface(IDarReferencia) - ['{0B34135E-0FB6-4CBA-AF23-A26B88542C10}'] - { Property getters and setters } - function GetOldVALORValue : String; - - { Properties } - property OldVALOR : String read GetOldVALORValue; - end; - - { TDarReferenciaBusinessProcessorRules } - TDarReferenciaBusinessProcessorRules = class(TDABusinessProcessorRules, IDarReferencia, IDarReferenciaDelta) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - function GetVALORIsNull: Boolean; virtual; - function GetOldVALORValue: String; virtual; - function GetOldVALORIsNull: Boolean; virtual; - procedure SetVALORValue(const aValue: String); virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR : String read GetVALORValue write SetVALORValue; - property VALORIsNull : Boolean read GetVALORIsNull write SetVALORIsNull; - property OldVALOR : String read GetOldVALORValue; - property OldVALORIsNull : Boolean read GetOldVALORIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - { IPresupuestosClienteDelta } IPresupuestosClienteDelta = interface(IPresupuestosCliente) - ['{847B43BF-5186-406F-92E6-2135D35EF01F}'] + ['{33FBE0A4-6909-4581-81D2-E8717839296B}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -412,7 +377,7 @@ type { IPresupuestosCliente_DetallesDelta } IPresupuestosCliente_DetallesDelta = interface(IPresupuestosCliente_Detalles) - ['{1DA22D38-0DB5-450C-AF43-3F7F4D2EA56E}'] + ['{F84CCA1D-138D-4516-818D-EE1757D249B1}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_PRESUPUESTOValue : Integer; @@ -605,49 +570,6 @@ implementation uses Variants, uROBinaryHelpers, uDAInterfaces; -{ TDarReferenciaBusinessProcessorRules } -constructor TDarReferenciaBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TDarReferenciaBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR]); -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]; -end; - -function TDarReferenciaBusinessProcessorRules.GetOldVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_DarReferenciaVALOR]); -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := aValue; -end; - -procedure TDarReferenciaBusinessProcessorRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_DarReferenciaVALOR] := Null; -end; - - { TPresupuestosClienteBusinessProcessorRules } constructor TPresupuestosClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); var @@ -2001,7 +1923,6 @@ end; initialization - RegisterBusinessProcessorRules(RID_DarReferenciaDelta, TDarReferenciaBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PresupuestosClienteDelta, TPresupuestosClienteBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PresupuestosCliente_DetallesDelta, TPresupuestosCliente_DetallesBusinessProcessorRules); diff --git a/Source/Modulos/Presupuestos de cliente/Model/uBizPresupuestosClienteServer.pas b/Source/Modulos/Presupuestos de cliente/Model/uBizPresupuestosClienteServer.pas index dc0784b0..82b5b7d9 100644 --- a/Source/Modulos/Presupuestos de cliente/Model/uBizPresupuestosClienteServer.pas +++ b/Source/Modulos/Presupuestos de cliente/Model/uBizPresupuestosClienteServer.pas @@ -8,68 +8,96 @@ uses const BIZ_SERVER_PRESUPUESTOS_CLIENTE = 'Server.PresupuestosCliente'; - REF_PRESUPUESTOS_CLIENTE = 'REF_PRESUPUESTOS_CLIENTE'; type TBizPresupuestosClienteServer = class(TPresupuestosClienteBusinessProcessorRules) + private + FReferenciaAutomatica : Boolean; + function DarReferencia : String; + function IncrementarReferencia : Boolean; protected - procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; + procedure BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); override; + procedure AfterProcessChange(Sender: TDABusinessProcessor; + aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); override; end; implementation uses Variants, uDAClasses, uReferenciasUtils, uBusinessUtils, uROClasses, uDataModuleServer, - schPresupuestosClienteClient_Intf; + schPresupuestosClienteClient_Intf, srvReferencias_Impl; + +const + REF_PRESUPUESTOS_CLIENTE = 'REF_PRESUPUESTOS_CLIENTE'; { TBizPresupuestosClienteServer } -procedure TBizPresupuestosClienteServer.BeforeProcessDelta( - Sender: TDABusinessProcessor; const aDelta: IDADelta); -var - ASchema : TDASchema; - ACurrentConn : IDAConnection; - dsData: IDADataset; - Empresa : Variant; - +procedure TBizPresupuestosClienteServer.AfterProcessChange( + Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); begin inherited; + { Por defecto, no es necesario mantener los deltas una vez + procesados los cambios. } + CanRemoveFromDelta := True; + + case aChange.ChangeType of + ctInsert, ctUpdate: begin + if FReferenciaAutomatica then + begin + IncrementarReferencia; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; + end; + end; +end; + +procedure TBizPresupuestosClienteServer.BeforeProcessDelta( + Sender: TDABusinessProcessor; const aDelta: IDADelta); +begin + inherited; + + FReferenciaAutomatica := False; case Sender.CurrentChange.ChangeType of ctInsert, ctUpdate: begin //Si la referencia no ha sido asignada le asignamos una nosotros - if (VarIsNull(Sender.CurrentChange.NewValueByName[fld_PresupuestosClienteREFERENCIA])) - or (VarToStr(Sender.CurrentChange.NewValueByName[fld_PresupuestosClienteREFERENCIA]) = '') then + if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then begin - ASchema := BusinessProcessor.Schema; - ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); - - try - //Siempre va a estar rellena - Empresa := Sender.CurrentChange.NewValueByName[fld_PresupuestosClienteID_EMPRESA]; - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [REF_PRESUPUESTOS_CLIENTE, Empresa]); - except - RaiseError('No existe la tabla REFERENCIAS'); - end; - - dsData.Active := True; - - if dsData.IsEmpty then - RaiseError('NO HAY REFERENCIA ' + REF_PRESUPUESTOS_CLIENTE + ' DECLARADA EN TABLA REFERENCIAS'); - - REFERENCIA := dsData.FieldByName(fld_DarReferenciaVALOR).AsString; - - try - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'EMPRESA'], [REF_PRESUPUESTOS_CLIENTE, DarReferenciaSiguiente(REFERENCIA), Empresa]); - except - RaiseError('Error al asignar la nueva ' + REFERENCIA + ' referencia en tabla'); - end; - + FReferenciaAutomatica := True; + REFERENCIA := DarReferencia; end; end; end; end; +function TBizPresupuestosClienteServer.DarReferencia: String; +begin + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(REF_PRESUPUESTOS_CLIENTE, ID_EMPRESA) + finally + Free; + end; +end; + +function TBizPresupuestosClienteServer.IncrementarReferencia: Boolean; +begin + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(REF_PRESUPUESTOS_CLIENTE, + Self.REFERENCIA, ID_EMPRESA) + finally + Free; + end; +end; + initialization RegisterBusinessProcessorRules(BIZ_SERVER_PRESUPUESTOS_CLIENTE, TBizPresupuestosClienteServer); diff --git a/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.dfm b/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.dfm index 4e84330e..cba8a404 100644 --- a/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.dfm +++ b/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.dfm @@ -12,43 +12,6 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente ConnectionManager = dmServer.ConnectionManager DataDictionary = DADataDictionary Datasets = < - item - Params = < - item - Name = 'CODIGO' - Value = '' - ParamType = daptInput - end - item - Name = 'EMPRESA' - Value = '' - ParamType = daptInput - end> - Statements = < - item - Connection = 'IBX' - ConnectionType = 'Interbase' - Default = True - TargetTable = 'REFERENCIAS' - Name = 'IBX' - SQL = - 'SELECT VALOR'#10'FROM REFERENCIAS'#10'WHERE CODIGO = :CODIGO'#10'AND ID_EMPR' + - 'ESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'VALOR' - TableField = 'VALOR' - end> - end> - Name = 'DarReferencia' - Fields = < - item - Name = 'VALOR' - DataType = datString - Size = 255 - end> - end item Params = <> Statements = < @@ -486,34 +449,6 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente JoinDataTables = <> UnionDataTables = <> Commands = < - item - Params = < - item - Name = 'VALOR' - Value = '' - end - item - Name = 'CODIGO' - Value = '' - end - item - Name = 'EMPRESA' - Value = '' - end> - Statements = < - item - Connection = 'IBX' - ConnectionType = 'Interbase' - Default = True - Name = 'IBX' - SQL = - 'UPDATE REFERENCIAS SET'#10' VALOR = :VALOR'#10'WHERE CODIGO = :COD' + - 'IGO AND'#10' ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'ModificarReferencia' - end item Params = < item diff --git a/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.pas b/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.pas index 2dbe8d20..d70cc2c5 100644 --- a/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.pas +++ b/Source/Modulos/Presupuestos de cliente/Servidor/srvPresupuestosCliente_Impl.pas @@ -31,7 +31,6 @@ type procedure DARemoteServiceBeforeGetDatasetData(const Dataset: IDADataset; const IncludeSchema: Boolean; const MaxRecords: Integer); procedure DARemoteServiceCreate(Sender: TObject); - private protected { IsrvPresupuestosCliente methods } function GenerateReport(const ID: String): Binary; diff --git a/Source/Modulos/Remesas de cliente/Model/schRemesasClienteClient_Intf.pas b/Source/Modulos/Remesas de cliente/Model/schRemesasClienteClient_Intf.pas index 2a892638..84b3d55b 100644 --- a/Source/Modulos/Remesas de cliente/Model/schRemesasClienteClient_Intf.pas +++ b/Source/Modulos/Remesas de cliente/Model/schRemesasClienteClient_Intf.pas @@ -9,19 +9,11 @@ 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_darReferencia = '{2A669FBE-2DE4-4257-8CA5-518E3E7FE0A3}'; - RID_RemesasCliente = '{6AD59CC0-CB4B-4B42-87E9-0C30BF117732}'; + RID_RemesasCliente = '{A3A37A96-7559-4E50-8495-1079545939AD}'; { Data table names } - nme_darReferencia = 'darReferencia'; nme_RemesasCliente = 'RemesasCliente'; - { darReferencia fields } - fld_darReferenciaVALOR = 'VALOR'; - - { darReferencia field indexes } - idx_darReferenciaVALOR = 0; - { RemesasCliente fields } fld_RemesasClienteID = 'ID'; fld_RemesasClienteID_EMPRESA = 'ID_EMPRESA'; @@ -63,44 +55,9 @@ const idx_RemesasClienteIMPORTE_TOTAL = 17; type - { IdarReferencia } - IdarReferencia = interface(IDAStronglyTypedDataTable) - ['{41ABA49E-1EC4-40B5-8174-E851C8735EF6}'] - { Property getters and setters } - function GetVALORValue: String; - procedure SetVALORValue(const aValue: String); - function GetVALORIsNull: Boolean; - procedure SetVALORIsNull(const aValue: Boolean); - - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - end; - - { TdarReferenciaDataTableRules } - TdarReferenciaDataTableRules = class(TIntfObjectDADataTableRules, IdarReferencia) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - procedure SetVALORValue(const aValue: String); virtual; - function GetVALORIsNull: Boolean; virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - { IRemesasCliente } IRemesasCliente = interface(IDAStronglyTypedDataTable) - ['{2DFC502B-A484-4565-BFCB-F4A172BBF594}'] + ['{DB8F46E9-380C-4C70-ABE6-04E5B22CF7A7}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -341,39 +298,6 @@ implementation uses Variants, uROBinaryHelpers; -{ TdarReferenciaDataTableRules } -constructor TdarReferenciaDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TdarReferenciaDataTableRules.Destroy; -begin - inherited; -end; - -function TdarReferenciaDataTableRules.GetVALORValue: String; -begin - result := DataTable.Fields[idx_darReferenciaVALOR].AsString; -end; - -procedure TdarReferenciaDataTableRules.SetVALORValue(const aValue: String); -begin - DataTable.Fields[idx_darReferenciaVALOR].AsString := aValue; -end; - -function TdarReferenciaDataTableRules.GetVALORIsNull: boolean; -begin - result := DataTable.Fields[idx_darReferenciaVALOR].IsNull; -end; - -procedure TdarReferenciaDataTableRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_darReferenciaVALOR].AsVariant := Null; -end; - - { TRemesasClienteDataTableRules } constructor TRemesasClienteDataTableRules.Create(aDataTable: TDADataTable); begin @@ -765,7 +689,6 @@ end; initialization - RegisterDataTableRules(RID_darReferencia, TdarReferenciaDataTableRules); RegisterDataTableRules(RID_RemesasCliente, TRemesasClienteDataTableRules); end. diff --git a/Source/Modulos/Remesas de cliente/Model/schRemesasClienteServer_Intf.pas b/Source/Modulos/Remesas de cliente/Model/schRemesasClienteServer_Intf.pas index e2782673..81095927 100644 --- a/Source/Modulos/Remesas de cliente/Model/schRemesasClienteServer_Intf.pas +++ b/Source/Modulos/Remesas de cliente/Model/schRemesasClienteServer_Intf.pas @@ -9,47 +9,12 @@ 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_darReferenciaDelta = '{93BE415A-B388-496F-B435-1AA6D4F3535C}'; - RID_RemesasClienteDelta = '{090FFD4E-3541-40D8-9577-9A6BBB35ECEB}'; + RID_RemesasClienteDelta = '{DF92284D-DA6F-4B1B-9E11-B808478A1CBD}'; type - { IdarReferenciaDelta } - IdarReferenciaDelta = interface(IdarReferencia) - ['{93BE415A-B388-496F-B435-1AA6D4F3535C}'] - { Property getters and setters } - function GetOldVALORValue : String; - - { Properties } - property OldVALOR : String read GetOldVALORValue; - end; - - { TdarReferenciaBusinessProcessorRules } - TdarReferenciaBusinessProcessorRules = class(TDABusinessProcessorRules, IdarReferencia, IdarReferenciaDelta) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - function GetVALORIsNull: Boolean; virtual; - function GetOldVALORValue: String; virtual; - function GetOldVALORIsNull: Boolean; virtual; - procedure SetVALORValue(const aValue: String); virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR : String read GetVALORValue write SetVALORValue; - property VALORIsNull : Boolean read GetVALORIsNull write SetVALORIsNull; - property OldVALOR : String read GetOldVALORValue; - property OldVALORIsNull : Boolean read GetOldVALORIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - { IRemesasClienteDelta } IRemesasClienteDelta = interface(IRemesasCliente) - ['{090FFD4E-3541-40D8-9577-9A6BBB35ECEB}'] + ['{DF92284D-DA6F-4B1B-9E11-B808478A1CBD}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -290,49 +255,6 @@ implementation uses Variants, uROBinaryHelpers, uDAInterfaces; -{ TdarReferenciaBusinessProcessorRules } -constructor TdarReferenciaBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TdarReferenciaBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TdarReferenciaBusinessProcessorRules.GetVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_darReferenciaVALOR]; -end; - -function TdarReferenciaBusinessProcessorRules.GetVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_darReferenciaVALOR]); -end; - -function TdarReferenciaBusinessProcessorRules.GetOldVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_darReferenciaVALOR]; -end; - -function TdarReferenciaBusinessProcessorRules.GetOldVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_darReferenciaVALOR]); -end; - -procedure TdarReferenciaBusinessProcessorRules.SetVALORValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_darReferenciaVALOR] := aValue; -end; - -procedure TdarReferenciaBusinessProcessorRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_darReferenciaVALOR] := Null; -end; - - { TRemesasClienteBusinessProcessorRules } constructor TRemesasClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); begin @@ -904,7 +826,6 @@ end; initialization - RegisterBusinessProcessorRules(RID_darReferenciaDelta, TdarReferenciaBusinessProcessorRules); RegisterBusinessProcessorRules(RID_RemesasClienteDelta, TRemesasClienteBusinessProcessorRules); end. diff --git a/Source/Modulos/Remesas de cliente/Model/uBizRemesasClienteServer.pas b/Source/Modulos/Remesas de cliente/Model/uBizRemesasClienteServer.pas index f2307e12..f878a177 100644 --- a/Source/Modulos/Remesas de cliente/Model/uBizRemesasClienteServer.pas +++ b/Source/Modulos/Remesas de cliente/Model/uBizRemesasClienteServer.pas @@ -8,69 +8,94 @@ uses const BIZ_SERVER_REMESAS_CLIENTE = 'Server.RemesasCliente'; - REF_REMESAS_CLIENTE = 'REF_REMESAS_CLIENTE'; type TBizRemesasClienteServer = class(TRemesasClienteBusinessProcessorRules) + private + FReferenciaAutomatica : Boolean; + function DarReferencia : String; + function IncrementarReferencia : Boolean; protected - procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; + procedure BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); override; + procedure AfterProcessChange(Sender: TDABusinessProcessor; + aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); override; end; implementation uses Variants, uDAClasses, uReferenciasUtils, uBusinessUtils, uROClasses, uDataModuleServer, - schRemesasClienteClient_Intf; - + schRemesasClienteClient_Intf, srvReferencias_Impl; +const + REF_REMESAS_CLIENTE = 'REF_REMESAS_CLIENTE'; + { TBizRemesasClienteServer } +procedure TBizRemesasClienteServer.AfterProcessChange( + Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); +begin + inherited; + { Por defecto, no es necesario mantener los deltas una vez + procesados los cambios. } + CanRemoveFromDelta := True; + + case aChange.ChangeType of + ctInsert, ctUpdate: begin + if FReferenciaAutomatica then + begin + IncrementarReferencia; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; + end; + end; +end; + procedure TBizRemesasClienteServer.BeforeProcessDelta( Sender: TDABusinessProcessor; const aDelta: IDADelta); -var - ASchema : TDASchema; - ACurrentConn : IDAConnection; - dsData: IDADataset; - Empresa : Variant; - begin - inherited; + FReferenciaAutomatica := False; + case Sender.CurrentChange.ChangeType of ctInsert, ctUpdate: begin //Si la referencia no ha sido asignada le asignamos una nosotros - if (VarIsNull(Sender.CurrentChange.NewValueByName[fld_RemesasClienteREFERENCIA])) - or (VarToStr(Sender.CurrentChange.NewValueByName[fld_RemesasClienteREFERENCIA]) = '') then + if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then begin - ASchema := BusinessProcessor.Schema; - ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); - - try - //Siempre va a estar rellena - Empresa := Sender.CurrentChange.NewValueByName[fld_RemesasClienteID_EMPRESA]; - - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [REF_REMESAS_CLIENTE, Empresa]); - except - RaiseError('No existe la tabla REFERENCIAS'); - end; - - dsData.Active := True; - - if dsData.IsEmpty then - RaiseError('NO HAY REFERENCIA ' + REF_REMESAS_CLIENTE + ' DECLARADA EN TABLA REFERENCIAS'); - - REFERENCIA := dsData.FieldByName('VALOR').AsString; - - try - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'ID_EMPRESA'], [REF_Remesas_CLIENTE, DarReferenciaSiguiente(REFERENCIA), Empresa]); - except - RaiseError('Error al asignar la nueva ' + REFERENCIA + ' referencia en tabla'); - end; - + FReferenciaAutomatica := True; + REFERENCIA := DarReferencia; end; end; end; end; +function TBizRemesasClienteServer.DarReferencia: String; +begin + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(REF_REMESAS_CLIENTE, ID_EMPRESA) + finally + Free; + end; +end; + +function TBizRemesasClienteServer.IncrementarReferencia: Boolean; +begin + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(REF_REMESAS_CLIENTE, + Self.REFERENCIA, ID_EMPRESA) + finally + Free; + end; +end; + initialization RegisterBusinessProcessorRules(BIZ_SERVER_REMESAS_CLIENTE, TBizRemesasClienteServer); diff --git a/Source/Modulos/Remesas de cliente/Servidor/srvRemesasCliente_Impl.dfm b/Source/Modulos/Remesas de cliente/Servidor/srvRemesasCliente_Impl.dfm index 5e3e1323..366efbd5 100644 --- a/Source/Modulos/Remesas de cliente/Servidor/srvRemesasCliente_Impl.dfm +++ b/Source/Modulos/Remesas de cliente/Servidor/srvRemesasCliente_Impl.dfm @@ -136,42 +136,6 @@ object srvRemesasCliente: TsrvRemesasCliente DataDictionary = DataDictionary Diagrams = Diagrams Datasets = < - item - Params = < - item - Name = 'CODIGO' - DataType = datString - Size = 50 - Value = 'REF_REMESAS_CLIENTE' - ParamType = daptInput - end - item - Name = 'EMPRESA' - Value = '1' - ParamType = daptInput - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'SELECT VALOR'#10'FROM REFERENCIAS'#10'WHERE CODIGO = :CODIGO'#10'AND ID_EMPR' + - 'ESA = :EMPRESA' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'VALOR' - TableField = 'VALOR' - end> - end> - Name = 'darReferencia' - Fields = < - item - Name = 'VALOR' - DataType = datString - Size = 255 - end> - end item Params = <> Statements = < @@ -363,32 +327,6 @@ object srvRemesasCliente: TsrvRemesasCliente JoinDataTables = <> UnionDataTables = <> Commands = < - item - Params = < - item - Name = 'VALOR' - Value = '' - end - item - Name = 'CODIGO' - Value = '' - end - item - Name = 'EMPRESA' - Value = '' - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'UPDATE REFERENCIAS SET'#10' VALOR = :VALOR'#10'WHERE CODIGO = :COD' + - 'IGO AND'#10' ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'ModificarReferencia' - end item Params = < item diff --git a/Source/Modulos/Remesas de cliente/Servidor/srvRemesasCliente_Impl.pas b/Source/Modulos/Remesas de cliente/Servidor/srvRemesasCliente_Impl.pas index e7e7f001..bc6edc92 100644 --- a/Source/Modulos/Remesas de cliente/Servidor/srvRemesasCliente_Impl.pas +++ b/Source/Modulos/Remesas de cliente/Servidor/srvRemesasCliente_Impl.pas @@ -23,9 +23,9 @@ type TsrvRemesasCliente = class(TDataAbstractService, IsrvRemesasCliente) Diagrams: TDADiagrams; bpRemesasCliente: TDABusinessProcessor; + Bin2DataStreamer: TDABin2DataStreamer; schRemesasCliente: TDASchema; DataDictionary: TDADataDictionary; - Bin2DataStreamer: TDABin2DataStreamer; procedure DARemoteServiceCreate(Sender: TObject); procedure DARemoteServiceBeforeGetDatasetData(const Dataset: IDADataset; const IncludeSchema: Boolean; const MaxRecords: Integer); diff --git a/Source/Modulos/Remesas de proveedor/Model/schRemesasProveedorClient_Intf.pas b/Source/Modulos/Remesas de proveedor/Model/schRemesasProveedorClient_Intf.pas index 933b8deb..3aa6be2a 100644 --- a/Source/Modulos/Remesas de proveedor/Model/schRemesasProveedorClient_Intf.pas +++ b/Source/Modulos/Remesas de proveedor/Model/schRemesasProveedorClient_Intf.pas @@ -9,19 +9,11 @@ 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_darReferencia = '{60F91383-6F77-4AD3-9E84-B27C782A1482}'; - RID_RemesasProveedor = '{044A9E1D-90AB-4E1C-BFCB-98772BB603BE}'; + RID_RemesasProveedor = '{2EB3551B-D75C-4B29-8F57-BCF984FDBFC8}'; { Data table names } - nme_darReferencia = 'darReferencia'; nme_RemesasProveedor = 'RemesasProveedor'; - { darReferencia fields } - fld_darReferenciaVALOR = 'VALOR'; - - { darReferencia field indexes } - idx_darReferenciaVALOR = 0; - { RemesasProveedor fields } fld_RemesasProveedorID = 'ID'; fld_RemesasProveedorID_EMPRESA = 'ID_EMPRESA'; @@ -63,44 +55,9 @@ const idx_RemesasProveedorIMPORTE_TOTAL = 17; type - { IdarReferencia } - IdarReferencia = interface(IDAStronglyTypedDataTable) - ['{3EC7EB36-5C81-4D96-924C-BFBAD8D38041}'] - { Property getters and setters } - function GetVALORValue: String; - procedure SetVALORValue(const aValue: String); - function GetVALORIsNull: Boolean; - procedure SetVALORIsNull(const aValue: Boolean); - - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - end; - - { TdarReferenciaDataTableRules } - TdarReferenciaDataTableRules = class(TIntfObjectDADataTableRules, IdarReferencia) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - procedure SetVALORValue(const aValue: String); virtual; - function GetVALORIsNull: Boolean; virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR: String read GetVALORValue write SetVALORValue; - property VALORIsNull: Boolean read GetVALORIsNull write SetVALORIsNull; - - public - constructor Create(aDataTable: TDADataTable); override; - destructor Destroy; override; - - end; - { IRemesasProveedor } IRemesasProveedor = interface(IDAStronglyTypedDataTable) - ['{33E0651A-D061-431F-9EAD-9B9B0458B888}'] + ['{C0DCF223-5495-4B6F-98BC-7C51719E7D34}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -341,39 +298,6 @@ implementation uses Variants, uROBinaryHelpers; -{ TdarReferenciaDataTableRules } -constructor TdarReferenciaDataTableRules.Create(aDataTable: TDADataTable); -begin - inherited; -end; - -destructor TdarReferenciaDataTableRules.Destroy; -begin - inherited; -end; - -function TdarReferenciaDataTableRules.GetVALORValue: String; -begin - result := DataTable.Fields[idx_darReferenciaVALOR].AsString; -end; - -procedure TdarReferenciaDataTableRules.SetVALORValue(const aValue: String); -begin - DataTable.Fields[idx_darReferenciaVALOR].AsString := aValue; -end; - -function TdarReferenciaDataTableRules.GetVALORIsNull: boolean; -begin - result := DataTable.Fields[idx_darReferenciaVALOR].IsNull; -end; - -procedure TdarReferenciaDataTableRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - DataTable.Fields[idx_darReferenciaVALOR].AsVariant := Null; -end; - - { TRemesasProveedorDataTableRules } constructor TRemesasProveedorDataTableRules.Create(aDataTable: TDADataTable); begin @@ -765,7 +689,6 @@ end; initialization - RegisterDataTableRules(RID_darReferencia, TdarReferenciaDataTableRules); RegisterDataTableRules(RID_RemesasProveedor, TRemesasProveedorDataTableRules); end. diff --git a/Source/Modulos/Remesas de proveedor/Model/schRemesasProveedorServer_Intf.pas b/Source/Modulos/Remesas de proveedor/Model/schRemesasProveedorServer_Intf.pas index d742efd4..c3a84386 100644 --- a/Source/Modulos/Remesas de proveedor/Model/schRemesasProveedorServer_Intf.pas +++ b/Source/Modulos/Remesas de proveedor/Model/schRemesasProveedorServer_Intf.pas @@ -9,47 +9,12 @@ 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_darReferenciaDelta = '{654CD172-ED14-43A0-85CD-7D5714EF6CA6}'; - RID_RemesasProveedorDelta = '{66615F2E-3E7A-49C6-AE86-A922790A3D92}'; + RID_RemesasProveedorDelta = '{8EF544D2-A579-49C7-A4AF-220B10067DE0}'; type - { IdarReferenciaDelta } - IdarReferenciaDelta = interface(IdarReferencia) - ['{654CD172-ED14-43A0-85CD-7D5714EF6CA6}'] - { Property getters and setters } - function GetOldVALORValue : String; - - { Properties } - property OldVALOR : String read GetOldVALORValue; - end; - - { TdarReferenciaBusinessProcessorRules } - TdarReferenciaBusinessProcessorRules = class(TDABusinessProcessorRules, IdarReferencia, IdarReferenciaDelta) - private - protected - { Property getters and setters } - function GetVALORValue: String; virtual; - function GetVALORIsNull: Boolean; virtual; - function GetOldVALORValue: String; virtual; - function GetOldVALORIsNull: Boolean; virtual; - procedure SetVALORValue(const aValue: String); virtual; - procedure SetVALORIsNull(const aValue: Boolean); virtual; - - { Properties } - property VALOR : String read GetVALORValue write SetVALORValue; - property VALORIsNull : Boolean read GetVALORIsNull write SetVALORIsNull; - property OldVALOR : String read GetOldVALORValue; - property OldVALORIsNull : Boolean read GetOldVALORIsNull; - - public - constructor Create(aBusinessProcessor: TDABusinessProcessor); override; - destructor Destroy; override; - - end; - { IRemesasProveedorDelta } IRemesasProveedorDelta = interface(IRemesasProveedor) - ['{66615F2E-3E7A-49C6-AE86-A922790A3D92}'] + ['{8EF544D2-A579-49C7-A4AF-220B10067DE0}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -290,49 +255,6 @@ implementation uses Variants, uROBinaryHelpers, uDAInterfaces; -{ TdarReferenciaBusinessProcessorRules } -constructor TdarReferenciaBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); -begin - inherited; -end; - -destructor TdarReferenciaBusinessProcessorRules.Destroy; -begin - inherited; -end; - -function TdarReferenciaBusinessProcessorRules.GetVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.NewValueByName[fld_darReferenciaVALOR]; -end; - -function TdarReferenciaBusinessProcessorRules.GetVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_darReferenciaVALOR]); -end; - -function TdarReferenciaBusinessProcessorRules.GetOldVALORValue: String; -begin - result := BusinessProcessor.CurrentChange.OldValueByName[fld_darReferenciaVALOR]; -end; - -function TdarReferenciaBusinessProcessorRules.GetOldVALORIsNull: Boolean; -begin - result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_darReferenciaVALOR]); -end; - -procedure TdarReferenciaBusinessProcessorRules.SetVALORValue(const aValue: String); -begin - BusinessProcessor.CurrentChange.NewValueByName[fld_darReferenciaVALOR] := aValue; -end; - -procedure TdarReferenciaBusinessProcessorRules.SetVALORIsNull(const aValue: Boolean); -begin - if aValue then - BusinessProcessor.CurrentChange.NewValueByName[fld_darReferenciaVALOR] := Null; -end; - - { TRemesasProveedorBusinessProcessorRules } constructor TRemesasProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); begin @@ -904,7 +826,6 @@ end; initialization - RegisterBusinessProcessorRules(RID_darReferenciaDelta, TdarReferenciaBusinessProcessorRules); RegisterBusinessProcessorRules(RID_RemesasProveedorDelta, TRemesasProveedorBusinessProcessorRules); end. diff --git a/Source/Modulos/Remesas de proveedor/Model/uBizRemesasProveedorServer.pas b/Source/Modulos/Remesas de proveedor/Model/uBizRemesasProveedorServer.pas index dee5a38a..7298acf8 100644 --- a/Source/Modulos/Remesas de proveedor/Model/uBizRemesasProveedorServer.pas +++ b/Source/Modulos/Remesas de proveedor/Model/uBizRemesasProveedorServer.pas @@ -8,68 +8,95 @@ uses const BIZ_SERVER_REMESAS_Proveedor = 'Server.RemesasProveedor'; - REF_REMESAS_PROVEEDOR = 'REF_REMESAS_PROVEEDOR'; + type TBizRemesasProveedorServer = class(TRemesasProveedorBusinessProcessorRules) + private + FReferenciaAutomatica : Boolean; + function DarReferencia : String; + function IncrementarReferencia : Boolean; protected - procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; + procedure BeforeProcessDelta(Sender: TDABusinessProcessor; + const aDelta: IDADelta); override; + procedure AfterProcessChange(Sender: TDABusinessProcessor; + aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); override; end; implementation uses Variants, uDAClasses, uReferenciasUtils, uBusinessUtils, uROClasses, uDataModuleServer, - schRemesasProveedorClient_Intf; + schRemesasProveedorClient_Intf, srvReferencias_Impl; + +const + REF_REMESAS_PROVEEDOR = 'REF_REMESAS_PROVEEDOR'; { TBizRemesasProveedorServer } -procedure TBizRemesasProveedorServer.BeforeProcessDelta( - Sender: TDABusinessProcessor; const aDelta: IDADelta); -var - ASchema : TDASchema; - ACurrentConn : IDAConnection; - dsData: IDADataset; - Empresa : Variant; - +procedure TBizRemesasProveedorServer.AfterProcessChange( + Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); begin inherited; + { Por defecto, no es necesario mantener los deltas una vez + procesados los cambios. } + CanRemoveFromDelta := True; + + case aChange.ChangeType of + ctInsert, ctUpdate: begin + if FReferenciaAutomatica then + begin + IncrementarReferencia; + FReferenciaAutomatica := False; + { En este caso no debemos quitar los deltas porque + el cliente tiene que enterarse de la referencia que + ha rellenado el servidor. } + CanRemoveFromDelta := False; + end; + end; + end; +end; + +procedure TBizRemesasProveedorServer.BeforeProcessDelta( + Sender: TDABusinessProcessor; const aDelta: IDADelta); +begin + FReferenciaAutomatica := False; + case Sender.CurrentChange.ChangeType of ctInsert, ctUpdate: begin //Si la referencia no ha sido asignada le asignamos una nosotros - if (VarIsNull(Sender.CurrentChange.NewValueByName[fld_RemesasProveedorREFERENCIA])) - or (VarToStr(Sender.CurrentChange.NewValueByName[fld_RemesasProveedorREFERENCIA]) = '') then + if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then begin - ASchema := BusinessProcessor.Schema; - ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); - - try - //Siempre va a estar rellena - Empresa := Sender.CurrentChange.NewValueByName[fld_RemesasProveedorID_EMPRESA]; - - dsData := ASchema.NewDataset(ACurrentConn, 'DarReferencia', ['CODIGO', 'EMPRESA'], [REF_REMESAS_PROVEEDOR, Empresa]); - except - RaiseError('No existe la tabla REFERENCIAS'); - end; - - dsData.Active := True; - - if dsData.IsEmpty then - RaiseError('NO HAY REFERENCIA ' + REF_REMESAS_PROVEEDOR + ' DECLARADA EN TABLA REFERENCIAS'); - - REFERENCIA := dsData.FieldByName('VALOR').AsString; - - try - ASchema.NewCommand(ACurrentConn, 'ModificarReferencia', ['CODIGO', 'VALOR', 'ID_EMPRESA'], [REF_REMESAS_PROVEEDOR, DarReferenciaSiguiente(REFERENCIA), Empresa]); - except - RaiseError('Error al asignar la nueva ' + REFERENCIA + ' referencia en tabla'); - end; - + FReferenciaAutomatica := True; + REFERENCIA := DarReferencia; end; end; end; end; +function TBizRemesasProveedorServer.DarReferencia: String; +begin + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(REF_REMESAS_PROVEEDOR, ID_EMPRESA) + finally + Free; + end; +end; + +function TBizRemesasProveedorServer.IncrementarReferencia: Boolean; +begin + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(REF_REMESAS_PROVEEDOR, + Self.REFERENCIA, ID_EMPRESA) + finally + Free; + end; +end; + initialization RegisterBusinessProcessorRules(BIZ_SERVER_REMESAS_Proveedor, TBizRemesasProveedorServer); diff --git a/Source/Modulos/Remesas de proveedor/Servidor/srvRemesasProveedor_Impl.dfm b/Source/Modulos/Remesas de proveedor/Servidor/srvRemesasProveedor_Impl.dfm index 304f26a5..eb66b629 100644 --- a/Source/Modulos/Remesas de proveedor/Servidor/srvRemesasProveedor_Impl.dfm +++ b/Source/Modulos/Remesas de proveedor/Servidor/srvRemesasProveedor_Impl.dfm @@ -136,42 +136,6 @@ object srvRemesasProveedor: TsrvRemesasProveedor DataDictionary = DataDictionary Diagrams = Diagrams Datasets = < - item - Params = < - item - Name = 'CODIGO' - DataType = datString - Size = 50 - Value = 'REF_REMESAS_CLIENTE' - ParamType = daptInput - end - item - Name = 'EMPRESA' - Value = '1' - ParamType = daptInput - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'SELECT VALOR'#10'FROM REFERENCIAS'#10'WHERE CODIGO = :CODIGO'#10'AND ID_EMPR' + - 'ESA = :EMPRESA' - StatementType = stSQL - ColumnMappings = < - item - DatasetField = 'VALOR' - TableField = 'VALOR' - end> - end> - Name = 'darReferencia' - Fields = < - item - Name = 'VALOR' - DataType = datString - Size = 255 - end> - end item Params = <> Statements = < @@ -363,32 +327,6 @@ object srvRemesasProveedor: TsrvRemesasProveedor JoinDataTables = <> UnionDataTables = <> Commands = < - item - Params = < - item - Name = 'VALOR' - Value = '' - end - item - Name = 'CODIGO' - Value = '' - end - item - Name = 'EMPRESA' - Value = '' - end> - Statements = < - item - Connection = 'IBX' - TargetTable = 'REFERENCIAS' - SQL = - 'UPDATE REFERENCIAS SET'#10' VALOR = :VALOR'#10'WHERE CODIGO = :COD' + - 'IGO AND'#10' ID_EMPRESA = :EMPRESA'#10 - StatementType = stSQL - ColumnMappings = <> - end> - Name = 'ModificarReferencia' - end item Params = < item diff --git a/Source/Modulos/Remesas de proveedor/Servidor/srvRemesasProveedor_Impl.pas b/Source/Modulos/Remesas de proveedor/Servidor/srvRemesasProveedor_Impl.pas index a8f1ef13..b9ab33ac 100644 --- a/Source/Modulos/Remesas de proveedor/Servidor/srvRemesasProveedor_Impl.pas +++ b/Source/Modulos/Remesas de proveedor/Servidor/srvRemesasProveedor_Impl.pas @@ -23,9 +23,9 @@ type TsrvRemesasProveedor = class(TDataAbstractService, IsrvRemesasProveedor) Diagrams: TDADiagrams; bpRemesasProveedor: TDABusinessProcessor; + Bin2DataStreamer: TDABin2DataStreamer; schRemesasProveedor: TDASchema; DataDictionary: TDADataDictionary; - Bin2DataStreamer: TDABin2DataStreamer; procedure DARemoteServiceCreate(Sender: TObject); procedure DARemoteServiceBeforeGetDatasetData(const Dataset: IDADataset; const IncludeSchema: Boolean; const MaxRecords: Integer);