diff --git a/Source/ApplicationBase/Empresas/Controller/uDatosBancariosEmpresaController.pas b/Source/ApplicationBase/Empresas/Controller/uDatosBancariosEmpresaController.pas index 6af352d..411aba1 100644 --- a/Source/ApplicationBase/Empresas/Controller/uDatosBancariosEmpresaController.pas +++ b/Source/ApplicationBase/Empresas/Controller/uDatosBancariosEmpresaController.pas @@ -16,7 +16,9 @@ type TDatosBancariosEmpresaController = class(TControllerBase, IDatosBancariosEmpresaController) private FDataModule : IDataModuleEmpresas; + protected public + function ValidarDatosBancarios(ADatosBancarios : IBizEmpresasDatosBancarios; AEmpresa : IBizEmpresa): Boolean; virtual; procedure Ver(ADatosBancarios : IBizEmpresasDatosBancarios); constructor Create; override; destructor Destroy; override; @@ -42,6 +44,36 @@ begin inherited; end; +function TDatosBancariosEmpresaController.ValidarDatosBancarios( + ADatosBancarios: IBizEmpresasDatosBancarios; AEmpresa : IBizEmpresa): Boolean; +begin + ADatosBancarios.DataTable.Edit; + + try + if not ADatosBancarios.IBANIsNull then + ADatosBancarios.IBAN := StringReplace(ADatosBancarios.IBAN, ' ', '', [rfReplaceAll]); // Quitar espacios + + if ADatosBancarios.SUFIJO_PRESENTADORIsNull then + ADatosBancarios.SUFIJO_PRESENTADOR := ADatosBancarios.SUFIJO_ACREEDOR; + + if ADatosBancarios.ENTIDAD_PRESENTADORIsNull then + ADatosBancarios.ENTIDAD_PRESENTADOR := ADatosBancarios.ENTIDAD; + + if ADatosBancarios.SUCURSAL_PRESENTADORIsNull then + ADatosBancarios.SUCURSAL_PRESENTADOR := ADatosBancarios.SUCURSAL; + + if ADatosBancarios.NIF_CIF_PRESENTADORIsNull then + ADatosBancarios.NIF_CIF_PRESENTADOR := AEmpresa.NIF_CIF; + + if ADatosBancarios.NOMBRE_PRESENTADORIsNull then + ADatosBancarios.NOMBRE_PRESENTADOR := AEmpresa.NOMBRE; + + finally + ADatosBancarios.DataTable.Post; + Result := True; + end; +end; + procedure TDatosBancariosEmpresaController.Ver(ADatosBancarios : IBizEmpresasDatosBancarios); var AEditor : IEditorDatosBancariosEmpresa; diff --git a/Source/ApplicationBase/Empresas/Controller/uEmpresasController.pas b/Source/ApplicationBase/Empresas/Controller/uEmpresasController.pas index 502df52..d4be8a7 100644 --- a/Source/ApplicationBase/Empresas/Controller/uEmpresasController.pas +++ b/Source/ApplicationBase/Empresas/Controller/uEmpresasController.pas @@ -71,7 +71,8 @@ implementation uses uDAInterfaces, uEditorRegistryUtils, cxControls, DB, uFactuGES_App, uStringsUtils, - uDataModuleEmpresas, uIEditorEmpresa, uBizEmpresasDatosBancarios, schEmpresasClient_Intf; + uDataModuleEmpresas, uIEditorEmpresa, uBizEmpresasDatosBancarios, schEmpresasClient_Intf, + uDatosBancariosEmpresaController; { TEmpresasController } @@ -368,6 +369,8 @@ begin end; function TEmpresasController.ValidarEmpresa(AEmpresa: IBizEmpresa): Boolean; +var + ADatosBancarios : IBizEmpresasDatosBancarios; begin if not Assigned(AEmpresa) then raise Exception.Create ('Empresa no asignada'); @@ -382,7 +385,23 @@ begin AEmpresa.Edit; AEmpresa.USUARIO := AppFactuGES.UsuarioActivo.UserName; AEmpresa.Post; - + + ADatosBancarios := AEmpresa.DatosBancarios; + ADatosBancarios.DataTable.Active := True; + + with TDatosBancariosEmpresaController.Create do + try + ADatosBancarios.DataTable.First; + while not ADatosBancarios.DataTable.EOF do + begin + if not ValidarDatosBancarios(ADatosBancarios, AEmpresa) then + Break; + ADatosBancarios.DataTable.Next; + end; + finally + Free; + end; + Result := True; end; diff --git a/Source/ApplicationBase/Empresas/Data/uDataModuleEmpresas.dfm b/Source/ApplicationBase/Empresas/Data/uDataModuleEmpresas.dfm index 2dbfb1d..6d0538b 100644 --- a/Source/ApplicationBase/Empresas/Data/uDataModuleEmpresas.dfm +++ b/Source/ApplicationBase/Empresas/Data/uDataModuleEmpresas.dfm @@ -297,11 +297,57 @@ inherited DataModuleEmpresas: TDataModuleEmpresas Name = 'IBAN' DataType = datString Size = 255 + DisplayLabel = 'EmpresasDatosBanco_IBAN' + DictionaryEntry = 'EmpresasDatosBanco_IBAN' end item Name = 'SWIFT' DataType = datString Size = 255 + DisplayLabel = 'BIC' + DictionaryEntry = 'EmpresasDatosBanco_SWIFT' + end + item + Name = 'SUFIJO_ACREEDOR' + DataType = datString + Size = 3 + DisplayLabel = 'Sufijo acreedor' + DictionaryEntry = 'EmpresasDatosBanco_SUFIJO_ACREEDOR' + end + item + Name = 'NOMBRE_PRESENTADOR' + DataType = datString + Size = 255 + DisplayLabel = 'Presentador' + DictionaryEntry = 'EmpresasDatosBanco_NOMBRE_PRESENTADOR' + end + item + Name = 'SUFIJO_PRESENTADOR' + DataType = datString + Size = 3 + DisplayLabel = 'Sufijo presentador' + DictionaryEntry = 'EmpresasDatosBanco_SUFIJO_PRESENTADOR' + end + item + Name = 'NIF_CIF_PRESENTADOR' + DataType = datString + Size = 15 + DisplayLabel = 'NIF/CIF presentador' + DictionaryEntry = 'EmpresasDatosBanco_NIF_CIF_PRESENTADOR' + end + item + Name = 'ENTIDAD_PRESENTADOR' + DataType = datString + Size = 15 + DisplayLabel = 'C'#243'd. Entidad presentador' + DictionaryEntry = 'EmpresasDatosBanco_ENTIDAD_PRESENTADOR' + end + item + Name = 'SUCURSAL_PRESENTADOR' + DataType = datString + Size = 15 + DisplayLabel = 'C'#243'd. sucursal presentador' + DictionaryEntry = 'EmpresasDatosBanco_SUCURSAL_PRESENTADOR' end> Params = <> MasterMappingMode = mmWhere diff --git a/Source/ApplicationBase/Empresas/Model/schEmpresasClient_Intf.pas b/Source/ApplicationBase/Empresas/Model/schEmpresasClient_Intf.pas index b02d645..c9e24d4 100644 --- a/Source/ApplicationBase/Empresas/Model/schEmpresasClient_Intf.pas +++ b/Source/ApplicationBase/Empresas/Model/schEmpresasClient_Intf.pas @@ -9,8 +9,8 @@ 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_Empresas = '{293CB9A8-A5CC-4A9C-80D0-74E9DC888BD8}'; - RID_EmpresasDatosBanco = '{DA3363E9-7834-447F-8266-B7410A41CEDB}'; + RID_Empresas = '{62467EEF-21A5-4B49-89AB-35AE73A15515}'; + RID_EmpresasDatosBanco = '{EA93C21F-6570-4108-B25C-512F72920134}'; { Data table names } nme_Empresas = 'Empresas'; @@ -88,6 +88,12 @@ const fld_EmpresasDatosBancoSUFIJO_N58 = 'SUFIJO_N58'; fld_EmpresasDatosBancoIBAN = 'IBAN'; fld_EmpresasDatosBancoSWIFT = 'SWIFT'; + fld_EmpresasDatosBancoSUFIJO_ACREEDOR = 'SUFIJO_ACREEDOR'; + fld_EmpresasDatosBancoNOMBRE_PRESENTADOR = 'NOMBRE_PRESENTADOR'; + fld_EmpresasDatosBancoSUFIJO_PRESENTADOR = 'SUFIJO_PRESENTADOR'; + fld_EmpresasDatosBancoNIF_CIF_PRESENTADOR = 'NIF_CIF_PRESENTADOR'; + fld_EmpresasDatosBancoENTIDAD_PRESENTADOR = 'ENTIDAD_PRESENTADOR'; + fld_EmpresasDatosBancoSUCURSAL_PRESENTADOR = 'SUCURSAL_PRESENTADOR'; { EmpresasDatosBanco field indexes } idx_EmpresasDatosBancoID = 0; @@ -101,11 +107,17 @@ const idx_EmpresasDatosBancoSUFIJO_N58 = 8; idx_EmpresasDatosBancoIBAN = 9; idx_EmpresasDatosBancoSWIFT = 10; + idx_EmpresasDatosBancoSUFIJO_ACREEDOR = 11; + idx_EmpresasDatosBancoNOMBRE_PRESENTADOR = 12; + idx_EmpresasDatosBancoSUFIJO_PRESENTADOR = 13; + idx_EmpresasDatosBancoNIF_CIF_PRESENTADOR = 14; + idx_EmpresasDatosBancoENTIDAD_PRESENTADOR = 15; + idx_EmpresasDatosBancoSUCURSAL_PRESENTADOR = 16; type { IEmpresas } IEmpresas = interface(IDAStronglyTypedDataTable) - ['{A0B6BA3C-6931-4E7C-94B1-4E916B0F6E1D}'] + ['{81B08C9A-BF70-4385-BDA7-302F3F2075B3}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -464,7 +476,7 @@ type { IEmpresasDatosBanco } IEmpresasDatosBanco = interface(IDAStronglyTypedDataTable) - ['{AB33F3C2-E3BB-41C1-AC47-543080C0A67B}'] + ['{75E6F351-83DD-4C64-A708-CBED48F69C95}'] { Property getters and setters } function GetIDValue: Integer; procedure SetIDValue(const aValue: Integer); @@ -510,6 +522,30 @@ type procedure SetSWIFTValue(const aValue: String); function GetSWIFTIsNull: Boolean; procedure SetSWIFTIsNull(const aValue: Boolean); + function GetSUFIJO_ACREEDORValue: String; + procedure SetSUFIJO_ACREEDORValue(const aValue: String); + function GetSUFIJO_ACREEDORIsNull: Boolean; + procedure SetSUFIJO_ACREEDORIsNull(const aValue: Boolean); + function GetNOMBRE_PRESENTADORValue: String; + procedure SetNOMBRE_PRESENTADORValue(const aValue: String); + function GetNOMBRE_PRESENTADORIsNull: Boolean; + procedure SetNOMBRE_PRESENTADORIsNull(const aValue: Boolean); + function GetSUFIJO_PRESENTADORValue: String; + procedure SetSUFIJO_PRESENTADORValue(const aValue: String); + function GetSUFIJO_PRESENTADORIsNull: Boolean; + procedure SetSUFIJO_PRESENTADORIsNull(const aValue: Boolean); + function GetNIF_CIF_PRESENTADORValue: String; + procedure SetNIF_CIF_PRESENTADORValue(const aValue: String); + function GetNIF_CIF_PRESENTADORIsNull: Boolean; + procedure SetNIF_CIF_PRESENTADORIsNull(const aValue: Boolean); + function GetENTIDAD_PRESENTADORValue: String; + procedure SetENTIDAD_PRESENTADORValue(const aValue: String); + function GetENTIDAD_PRESENTADORIsNull: Boolean; + procedure SetENTIDAD_PRESENTADORIsNull(const aValue: Boolean); + function GetSUCURSAL_PRESENTADORValue: String; + procedure SetSUCURSAL_PRESENTADORValue(const aValue: String); + function GetSUCURSAL_PRESENTADORIsNull: Boolean; + procedure SetSUCURSAL_PRESENTADORIsNull(const aValue: Boolean); { Properties } @@ -535,6 +571,18 @@ type property IBANIsNull: Boolean read GetIBANIsNull write SetIBANIsNull; property SWIFT: String read GetSWIFTValue write SetSWIFTValue; property SWIFTIsNull: Boolean read GetSWIFTIsNull write SetSWIFTIsNull; + property SUFIJO_ACREEDOR: String read GetSUFIJO_ACREEDORValue write SetSUFIJO_ACREEDORValue; + property SUFIJO_ACREEDORIsNull: Boolean read GetSUFIJO_ACREEDORIsNull write SetSUFIJO_ACREEDORIsNull; + property NOMBRE_PRESENTADOR: String read GetNOMBRE_PRESENTADORValue write SetNOMBRE_PRESENTADORValue; + property NOMBRE_PRESENTADORIsNull: Boolean read GetNOMBRE_PRESENTADORIsNull write SetNOMBRE_PRESENTADORIsNull; + property SUFIJO_PRESENTADOR: String read GetSUFIJO_PRESENTADORValue write SetSUFIJO_PRESENTADORValue; + property SUFIJO_PRESENTADORIsNull: Boolean read GetSUFIJO_PRESENTADORIsNull write SetSUFIJO_PRESENTADORIsNull; + property NIF_CIF_PRESENTADOR: String read GetNIF_CIF_PRESENTADORValue write SetNIF_CIF_PRESENTADORValue; + property NIF_CIF_PRESENTADORIsNull: Boolean read GetNIF_CIF_PRESENTADORIsNull write SetNIF_CIF_PRESENTADORIsNull; + property ENTIDAD_PRESENTADOR: String read GetENTIDAD_PRESENTADORValue write SetENTIDAD_PRESENTADORValue; + property ENTIDAD_PRESENTADORIsNull: Boolean read GetENTIDAD_PRESENTADORIsNull write SetENTIDAD_PRESENTADORIsNull; + property SUCURSAL_PRESENTADOR: String read GetSUCURSAL_PRESENTADORValue write SetSUCURSAL_PRESENTADORValue; + property SUCURSAL_PRESENTADORIsNull: Boolean read GetSUCURSAL_PRESENTADORIsNull write SetSUCURSAL_PRESENTADORIsNull; end; { TEmpresasDatosBancoDataTableRules } @@ -586,6 +634,30 @@ type procedure SetSWIFTValue(const aValue: String); virtual; function GetSWIFTIsNull: Boolean; virtual; procedure SetSWIFTIsNull(const aValue: Boolean); virtual; + function GetSUFIJO_ACREEDORValue: String; virtual; + procedure SetSUFIJO_ACREEDORValue(const aValue: String); virtual; + function GetSUFIJO_ACREEDORIsNull: Boolean; virtual; + procedure SetSUFIJO_ACREEDORIsNull(const aValue: Boolean); virtual; + function GetNOMBRE_PRESENTADORValue: String; virtual; + procedure SetNOMBRE_PRESENTADORValue(const aValue: String); virtual; + function GetNOMBRE_PRESENTADORIsNull: Boolean; virtual; + procedure SetNOMBRE_PRESENTADORIsNull(const aValue: Boolean); virtual; + function GetSUFIJO_PRESENTADORValue: String; virtual; + procedure SetSUFIJO_PRESENTADORValue(const aValue: String); virtual; + function GetSUFIJO_PRESENTADORIsNull: Boolean; virtual; + procedure SetSUFIJO_PRESENTADORIsNull(const aValue: Boolean); virtual; + function GetNIF_CIF_PRESENTADORValue: String; virtual; + procedure SetNIF_CIF_PRESENTADORValue(const aValue: String); virtual; + function GetNIF_CIF_PRESENTADORIsNull: Boolean; virtual; + procedure SetNIF_CIF_PRESENTADORIsNull(const aValue: Boolean); virtual; + function GetENTIDAD_PRESENTADORValue: String; virtual; + procedure SetENTIDAD_PRESENTADORValue(const aValue: String); virtual; + function GetENTIDAD_PRESENTADORIsNull: Boolean; virtual; + procedure SetENTIDAD_PRESENTADORIsNull(const aValue: Boolean); virtual; + function GetSUCURSAL_PRESENTADORValue: String; virtual; + procedure SetSUCURSAL_PRESENTADORValue(const aValue: String); virtual; + function GetSUCURSAL_PRESENTADORIsNull: Boolean; virtual; + procedure SetSUCURSAL_PRESENTADORIsNull(const aValue: Boolean); virtual; { Properties } property ID: Integer read GetIDValue write SetIDValue; @@ -610,6 +682,18 @@ type property IBANIsNull: Boolean read GetIBANIsNull write SetIBANIsNull; property SWIFT: String read GetSWIFTValue write SetSWIFTValue; property SWIFTIsNull: Boolean read GetSWIFTIsNull write SetSWIFTIsNull; + property SUFIJO_ACREEDOR: String read GetSUFIJO_ACREEDORValue write SetSUFIJO_ACREEDORValue; + property SUFIJO_ACREEDORIsNull: Boolean read GetSUFIJO_ACREEDORIsNull write SetSUFIJO_ACREEDORIsNull; + property NOMBRE_PRESENTADOR: String read GetNOMBRE_PRESENTADORValue write SetNOMBRE_PRESENTADORValue; + property NOMBRE_PRESENTADORIsNull: Boolean read GetNOMBRE_PRESENTADORIsNull write SetNOMBRE_PRESENTADORIsNull; + property SUFIJO_PRESENTADOR: String read GetSUFIJO_PRESENTADORValue write SetSUFIJO_PRESENTADORValue; + property SUFIJO_PRESENTADORIsNull: Boolean read GetSUFIJO_PRESENTADORIsNull write SetSUFIJO_PRESENTADORIsNull; + property NIF_CIF_PRESENTADOR: String read GetNIF_CIF_PRESENTADORValue write SetNIF_CIF_PRESENTADORValue; + property NIF_CIF_PRESENTADORIsNull: Boolean read GetNIF_CIF_PRESENTADORIsNull write SetNIF_CIF_PRESENTADORIsNull; + property ENTIDAD_PRESENTADOR: String read GetENTIDAD_PRESENTADORValue write SetENTIDAD_PRESENTADORValue; + property ENTIDAD_PRESENTADORIsNull: Boolean read GetENTIDAD_PRESENTADORIsNull write SetENTIDAD_PRESENTADORIsNull; + property SUCURSAL_PRESENTADOR: String read GetSUCURSAL_PRESENTADORValue write SetSUCURSAL_PRESENTADORValue; + property SUCURSAL_PRESENTADORIsNull: Boolean read GetSUCURSAL_PRESENTADORIsNull write SetSUCURSAL_PRESENTADORIsNull; public constructor Create(aDataTable: TDADataTable); override; @@ -1480,6 +1564,132 @@ begin DataTable.Fields[idx_EmpresasDatosBancoSWIFT].AsVariant := Null; end; +function TEmpresasDatosBancoDataTableRules.GetSUFIJO_ACREEDORValue: String; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoSUFIJO_ACREEDOR].AsString; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetSUFIJO_ACREEDORValue(const aValue: String); +begin + DataTable.Fields[idx_EmpresasDatosBancoSUFIJO_ACREEDOR].AsString := aValue; +end; + +function TEmpresasDatosBancoDataTableRules.GetSUFIJO_ACREEDORIsNull: boolean; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoSUFIJO_ACREEDOR].IsNull; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetSUFIJO_ACREEDORIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_EmpresasDatosBancoSUFIJO_ACREEDOR].AsVariant := Null; +end; + +function TEmpresasDatosBancoDataTableRules.GetNOMBRE_PRESENTADORValue: String; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoNOMBRE_PRESENTADOR].AsString; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetNOMBRE_PRESENTADORValue(const aValue: String); +begin + DataTable.Fields[idx_EmpresasDatosBancoNOMBRE_PRESENTADOR].AsString := aValue; +end; + +function TEmpresasDatosBancoDataTableRules.GetNOMBRE_PRESENTADORIsNull: boolean; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoNOMBRE_PRESENTADOR].IsNull; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetNOMBRE_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_EmpresasDatosBancoNOMBRE_PRESENTADOR].AsVariant := Null; +end; + +function TEmpresasDatosBancoDataTableRules.GetSUFIJO_PRESENTADORValue: String; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoSUFIJO_PRESENTADOR].AsString; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetSUFIJO_PRESENTADORValue(const aValue: String); +begin + DataTable.Fields[idx_EmpresasDatosBancoSUFIJO_PRESENTADOR].AsString := aValue; +end; + +function TEmpresasDatosBancoDataTableRules.GetSUFIJO_PRESENTADORIsNull: boolean; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoSUFIJO_PRESENTADOR].IsNull; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetSUFIJO_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_EmpresasDatosBancoSUFIJO_PRESENTADOR].AsVariant := Null; +end; + +function TEmpresasDatosBancoDataTableRules.GetNIF_CIF_PRESENTADORValue: String; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoNIF_CIF_PRESENTADOR].AsString; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetNIF_CIF_PRESENTADORValue(const aValue: String); +begin + DataTable.Fields[idx_EmpresasDatosBancoNIF_CIF_PRESENTADOR].AsString := aValue; +end; + +function TEmpresasDatosBancoDataTableRules.GetNIF_CIF_PRESENTADORIsNull: boolean; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoNIF_CIF_PRESENTADOR].IsNull; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetNIF_CIF_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_EmpresasDatosBancoNIF_CIF_PRESENTADOR].AsVariant := Null; +end; + +function TEmpresasDatosBancoDataTableRules.GetENTIDAD_PRESENTADORValue: String; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoENTIDAD_PRESENTADOR].AsString; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetENTIDAD_PRESENTADORValue(const aValue: String); +begin + DataTable.Fields[idx_EmpresasDatosBancoENTIDAD_PRESENTADOR].AsString := aValue; +end; + +function TEmpresasDatosBancoDataTableRules.GetENTIDAD_PRESENTADORIsNull: boolean; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoENTIDAD_PRESENTADOR].IsNull; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetENTIDAD_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_EmpresasDatosBancoENTIDAD_PRESENTADOR].AsVariant := Null; +end; + +function TEmpresasDatosBancoDataTableRules.GetSUCURSAL_PRESENTADORValue: String; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoSUCURSAL_PRESENTADOR].AsString; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetSUCURSAL_PRESENTADORValue(const aValue: String); +begin + DataTable.Fields[idx_EmpresasDatosBancoSUCURSAL_PRESENTADOR].AsString := aValue; +end; + +function TEmpresasDatosBancoDataTableRules.GetSUCURSAL_PRESENTADORIsNull: boolean; +begin + result := DataTable.Fields[idx_EmpresasDatosBancoSUCURSAL_PRESENTADOR].IsNull; +end; + +procedure TEmpresasDatosBancoDataTableRules.SetSUCURSAL_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + DataTable.Fields[idx_EmpresasDatosBancoSUCURSAL_PRESENTADOR].AsVariant := Null; +end; + initialization RegisterDataTableRules(RID_Empresas, TEmpresasDataTableRules); diff --git a/Source/ApplicationBase/Empresas/Model/schEmpresasServer_Intf.pas b/Source/ApplicationBase/Empresas/Model/schEmpresasServer_Intf.pas index 0f31fa1..8049918 100644 --- a/Source/ApplicationBase/Empresas/Model/schEmpresasServer_Intf.pas +++ b/Source/ApplicationBase/Empresas/Model/schEmpresasServer_Intf.pas @@ -9,13 +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_EmpresasDelta = '{78465C96-13EC-4CAE-806F-50EFEE766C85}'; - RID_EmpresasDatosBancoDelta = '{E4194A47-772D-40BC-8DF0-9D4C7AFDEC77}'; + RID_EmpresasDelta = '{415F9B21-75FF-4944-BC51-36EE7893F213}'; + RID_EmpresasDatosBancoDelta = '{89191BEE-980B-4F20-BC43-492662CF8779}'; type { IEmpresasDelta } IEmpresasDelta = interface(IEmpresas) - ['{78465C96-13EC-4CAE-806F-50EFEE766C85}'] + ['{415F9B21-75FF-4944-BC51-36EE7893F213}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldNIF_CIFValue : String; @@ -375,7 +375,7 @@ type { IEmpresasDatosBancoDelta } IEmpresasDatosBancoDelta = interface(IEmpresasDatosBanco) - ['{E4194A47-772D-40BC-8DF0-9D4C7AFDEC77}'] + ['{89191BEE-980B-4F20-BC43-492662CF8779}'] { Property getters and setters } function GetOldIDValue : Integer; function GetOldID_EMPRESAValue : Integer; @@ -388,6 +388,12 @@ type function GetOldSUFIJO_N58Value : String; function GetOldIBANValue : String; function GetOldSWIFTValue : String; + function GetOldSUFIJO_ACREEDORValue : String; + function GetOldNOMBRE_PRESENTADORValue : String; + function GetOldSUFIJO_PRESENTADORValue : String; + function GetOldNIF_CIF_PRESENTADORValue : String; + function GetOldENTIDAD_PRESENTADORValue : String; + function GetOldSUCURSAL_PRESENTADORValue : String; { Properties } property OldID : Integer read GetOldIDValue; @@ -401,6 +407,12 @@ type property OldSUFIJO_N58 : String read GetOldSUFIJO_N58Value; property OldIBAN : String read GetOldIBANValue; property OldSWIFT : String read GetOldSWIFTValue; + property OldSUFIJO_ACREEDOR : String read GetOldSUFIJO_ACREEDORValue; + property OldNOMBRE_PRESENTADOR : String read GetOldNOMBRE_PRESENTADORValue; + property OldSUFIJO_PRESENTADOR : String read GetOldSUFIJO_PRESENTADORValue; + property OldNIF_CIF_PRESENTADOR : String read GetOldNIF_CIF_PRESENTADORValue; + property OldENTIDAD_PRESENTADOR : String read GetOldENTIDAD_PRESENTADORValue; + property OldSUCURSAL_PRESENTADOR : String read GetOldSUCURSAL_PRESENTADORValue; end; { TEmpresasDatosBancoBusinessProcessorRules } @@ -474,6 +486,42 @@ type function GetOldSWIFTIsNull: Boolean; virtual; procedure SetSWIFTValue(const aValue: String); virtual; procedure SetSWIFTIsNull(const aValue: Boolean); virtual; + function GetSUFIJO_ACREEDORValue: String; virtual; + function GetSUFIJO_ACREEDORIsNull: Boolean; virtual; + function GetOldSUFIJO_ACREEDORValue: String; virtual; + function GetOldSUFIJO_ACREEDORIsNull: Boolean; virtual; + procedure SetSUFIJO_ACREEDORValue(const aValue: String); virtual; + procedure SetSUFIJO_ACREEDORIsNull(const aValue: Boolean); virtual; + function GetNOMBRE_PRESENTADORValue: String; virtual; + function GetNOMBRE_PRESENTADORIsNull: Boolean; virtual; + function GetOldNOMBRE_PRESENTADORValue: String; virtual; + function GetOldNOMBRE_PRESENTADORIsNull: Boolean; virtual; + procedure SetNOMBRE_PRESENTADORValue(const aValue: String); virtual; + procedure SetNOMBRE_PRESENTADORIsNull(const aValue: Boolean); virtual; + function GetSUFIJO_PRESENTADORValue: String; virtual; + function GetSUFIJO_PRESENTADORIsNull: Boolean; virtual; + function GetOldSUFIJO_PRESENTADORValue: String; virtual; + function GetOldSUFIJO_PRESENTADORIsNull: Boolean; virtual; + procedure SetSUFIJO_PRESENTADORValue(const aValue: String); virtual; + procedure SetSUFIJO_PRESENTADORIsNull(const aValue: Boolean); virtual; + function GetNIF_CIF_PRESENTADORValue: String; virtual; + function GetNIF_CIF_PRESENTADORIsNull: Boolean; virtual; + function GetOldNIF_CIF_PRESENTADORValue: String; virtual; + function GetOldNIF_CIF_PRESENTADORIsNull: Boolean; virtual; + procedure SetNIF_CIF_PRESENTADORValue(const aValue: String); virtual; + procedure SetNIF_CIF_PRESENTADORIsNull(const aValue: Boolean); virtual; + function GetENTIDAD_PRESENTADORValue: String; virtual; + function GetENTIDAD_PRESENTADORIsNull: Boolean; virtual; + function GetOldENTIDAD_PRESENTADORValue: String; virtual; + function GetOldENTIDAD_PRESENTADORIsNull: Boolean; virtual; + procedure SetENTIDAD_PRESENTADORValue(const aValue: String); virtual; + procedure SetENTIDAD_PRESENTADORIsNull(const aValue: Boolean); virtual; + function GetSUCURSAL_PRESENTADORValue: String; virtual; + function GetSUCURSAL_PRESENTADORIsNull: Boolean; virtual; + function GetOldSUCURSAL_PRESENTADORValue: String; virtual; + function GetOldSUCURSAL_PRESENTADORIsNull: Boolean; virtual; + procedure SetSUCURSAL_PRESENTADORValue(const aValue: String); virtual; + procedure SetSUCURSAL_PRESENTADORIsNull(const aValue: Boolean); virtual; { Properties } property ID : Integer read GetIDValue write SetIDValue; @@ -520,6 +568,30 @@ type property SWIFTIsNull : Boolean read GetSWIFTIsNull write SetSWIFTIsNull; property OldSWIFT : String read GetOldSWIFTValue; property OldSWIFTIsNull : Boolean read GetOldSWIFTIsNull; + property SUFIJO_ACREEDOR : String read GetSUFIJO_ACREEDORValue write SetSUFIJO_ACREEDORValue; + property SUFIJO_ACREEDORIsNull : Boolean read GetSUFIJO_ACREEDORIsNull write SetSUFIJO_ACREEDORIsNull; + property OldSUFIJO_ACREEDOR : String read GetOldSUFIJO_ACREEDORValue; + property OldSUFIJO_ACREEDORIsNull : Boolean read GetOldSUFIJO_ACREEDORIsNull; + property NOMBRE_PRESENTADOR : String read GetNOMBRE_PRESENTADORValue write SetNOMBRE_PRESENTADORValue; + property NOMBRE_PRESENTADORIsNull : Boolean read GetNOMBRE_PRESENTADORIsNull write SetNOMBRE_PRESENTADORIsNull; + property OldNOMBRE_PRESENTADOR : String read GetOldNOMBRE_PRESENTADORValue; + property OldNOMBRE_PRESENTADORIsNull : Boolean read GetOldNOMBRE_PRESENTADORIsNull; + property SUFIJO_PRESENTADOR : String read GetSUFIJO_PRESENTADORValue write SetSUFIJO_PRESENTADORValue; + property SUFIJO_PRESENTADORIsNull : Boolean read GetSUFIJO_PRESENTADORIsNull write SetSUFIJO_PRESENTADORIsNull; + property OldSUFIJO_PRESENTADOR : String read GetOldSUFIJO_PRESENTADORValue; + property OldSUFIJO_PRESENTADORIsNull : Boolean read GetOldSUFIJO_PRESENTADORIsNull; + property NIF_CIF_PRESENTADOR : String read GetNIF_CIF_PRESENTADORValue write SetNIF_CIF_PRESENTADORValue; + property NIF_CIF_PRESENTADORIsNull : Boolean read GetNIF_CIF_PRESENTADORIsNull write SetNIF_CIF_PRESENTADORIsNull; + property OldNIF_CIF_PRESENTADOR : String read GetOldNIF_CIF_PRESENTADORValue; + property OldNIF_CIF_PRESENTADORIsNull : Boolean read GetOldNIF_CIF_PRESENTADORIsNull; + property ENTIDAD_PRESENTADOR : String read GetENTIDAD_PRESENTADORValue write SetENTIDAD_PRESENTADORValue; + property ENTIDAD_PRESENTADORIsNull : Boolean read GetENTIDAD_PRESENTADORIsNull write SetENTIDAD_PRESENTADORIsNull; + property OldENTIDAD_PRESENTADOR : String read GetOldENTIDAD_PRESENTADORValue; + property OldENTIDAD_PRESENTADORIsNull : Boolean read GetOldENTIDAD_PRESENTADORIsNull; + property SUCURSAL_PRESENTADOR : String read GetSUCURSAL_PRESENTADORValue write SetSUCURSAL_PRESENTADORValue; + property SUCURSAL_PRESENTADORIsNull : Boolean read GetSUCURSAL_PRESENTADORIsNull write SetSUCURSAL_PRESENTADORIsNull; + property OldSUCURSAL_PRESENTADOR : String read GetOldSUCURSAL_PRESENTADORValue; + property OldSUCURSAL_PRESENTADORIsNull : Boolean read GetOldSUCURSAL_PRESENTADORIsNull; public constructor Create(aBusinessProcessor: TDABusinessProcessor); override; @@ -1783,6 +1855,192 @@ begin BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSWIFT] := Null; end; +function TEmpresasDatosBancoBusinessProcessorRules.GetSUFIJO_ACREEDORValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUFIJO_ACREEDOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetSUFIJO_ACREEDORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUFIJO_ACREEDOR]); +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldSUFIJO_ACREEDORValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoSUFIJO_ACREEDOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldSUFIJO_ACREEDORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoSUFIJO_ACREEDOR]); +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetSUFIJO_ACREEDORValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUFIJO_ACREEDOR] := aValue; +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetSUFIJO_ACREEDORIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUFIJO_ACREEDOR] := Null; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetNOMBRE_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoNOMBRE_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetNOMBRE_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoNOMBRE_PRESENTADOR]); +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldNOMBRE_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoNOMBRE_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldNOMBRE_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoNOMBRE_PRESENTADOR]); +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetNOMBRE_PRESENTADORValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoNOMBRE_PRESENTADOR] := aValue; +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetNOMBRE_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoNOMBRE_PRESENTADOR] := Null; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetSUFIJO_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUFIJO_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetSUFIJO_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUFIJO_PRESENTADOR]); +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldSUFIJO_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoSUFIJO_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldSUFIJO_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoSUFIJO_PRESENTADOR]); +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetSUFIJO_PRESENTADORValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUFIJO_PRESENTADOR] := aValue; +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetSUFIJO_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUFIJO_PRESENTADOR] := Null; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetNIF_CIF_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoNIF_CIF_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetNIF_CIF_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoNIF_CIF_PRESENTADOR]); +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldNIF_CIF_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoNIF_CIF_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldNIF_CIF_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoNIF_CIF_PRESENTADOR]); +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetNIF_CIF_PRESENTADORValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoNIF_CIF_PRESENTADOR] := aValue; +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetNIF_CIF_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoNIF_CIF_PRESENTADOR] := Null; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetENTIDAD_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoENTIDAD_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetENTIDAD_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoENTIDAD_PRESENTADOR]); +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldENTIDAD_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoENTIDAD_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldENTIDAD_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoENTIDAD_PRESENTADOR]); +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetENTIDAD_PRESENTADORValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoENTIDAD_PRESENTADOR] := aValue; +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetENTIDAD_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoENTIDAD_PRESENTADOR] := Null; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetSUCURSAL_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUCURSAL_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetSUCURSAL_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUCURSAL_PRESENTADOR]); +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldSUCURSAL_PRESENTADORValue: String; +begin + result := BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoSUCURSAL_PRESENTADOR]; +end; + +function TEmpresasDatosBancoBusinessProcessorRules.GetOldSUCURSAL_PRESENTADORIsNull: Boolean; +begin + result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_EmpresasDatosBancoSUCURSAL_PRESENTADOR]); +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetSUCURSAL_PRESENTADORValue(const aValue: String); +begin + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUCURSAL_PRESENTADOR] := aValue; +end; + +procedure TEmpresasDatosBancoBusinessProcessorRules.SetSUCURSAL_PRESENTADORIsNull(const aValue: Boolean); +begin + if aValue then + BusinessProcessor.CurrentChange.NewValueByName[fld_EmpresasDatosBancoSUCURSAL_PRESENTADOR] := Null; +end; + initialization RegisterBusinessProcessorRules(RID_EmpresasDelta, TEmpresasBusinessProcessorRules); diff --git a/Source/ApplicationBase/Empresas/Servidor/srvEmpresas_Impl.dfm b/Source/ApplicationBase/Empresas/Servidor/srvEmpresas_Impl.dfm index 901715d..20367d2 100644 --- a/Source/ApplicationBase/Empresas/Servidor/srvEmpresas_Impl.dfm +++ b/Source/ApplicationBase/Empresas/Servidor/srvEmpresas_Impl.dfm @@ -354,6 +354,30 @@ object srvEmpresas: TsrvEmpresas item DatasetField = 'SWIFT' TableField = 'SWIFT' + end + item + DatasetField = 'SUFIJO_ACREEDOR' + TableField = 'SUFIJO_ACREEDOR' + end + item + DatasetField = 'NOMBRE_PRESENTADOR' + TableField = 'NOMBRE_PRESENTADOR' + end + item + DatasetField = 'SUFIJO_PRESENTADOR' + TableField = 'SUFIJO_PRESENTADOR' + end + item + DatasetField = 'NIF_CIF_PRESENTADOR' + TableField = 'NIF_CIF_PRESENTADOR' + end + item + DatasetField = 'ENTIDAD_PRESENTADOR' + TableField = 'ENTIDAD_PRESENTADOR' + end + item + DatasetField = 'SUCURSAL_PRESENTADOR' + TableField = 'SUCURSAL_PRESENTADOR' end> end> Name = 'EmpresasDatosBanco' @@ -417,11 +441,49 @@ object srvEmpresas: TsrvEmpresas Name = 'IBAN' DataType = datString Size = 255 + DictionaryEntry = 'EmpresasDatosBanco_IBAN' end item Name = 'SWIFT' DataType = datString Size = 255 + DictionaryEntry = 'EmpresasDatosBanco_SWIFT' + end + item + Name = 'SUFIJO_ACREEDOR' + DataType = datString + Size = 3 + DictionaryEntry = 'EmpresasDatosBanco_SUFIJO_ACREEDOR' + end + item + Name = 'NOMBRE_PRESENTADOR' + DataType = datString + Size = 255 + DictionaryEntry = 'EmpresasDatosBanco_NOMBRE_PRESENTADOR' + end + item + Name = 'SUFIJO_PRESENTADOR' + DataType = datString + Size = 3 + DictionaryEntry = 'EmpresasDatosBanco_SUFIJO_PRESENTADOR' + end + item + Name = 'NIF_CIF_PRESENTADOR' + DataType = datString + Size = 15 + DictionaryEntry = 'EmpresasDatosBanco_NIF_CIF_PRESENTADOR' + end + item + Name = 'ENTIDAD_PRESENTADOR' + DataType = datString + Size = 15 + DictionaryEntry = 'EmpresasDatosBanco_ENTIDAD_PRESENTADOR' + end + item + Name = 'SUCURSAL_PRESENTADOR' + DataType = datString + Size = 15 + DictionaryEntry = 'EmpresasDatosBanco_SUCURSAL_PRESENTADOR' end> end> JoinDataTables = <> @@ -1114,6 +1176,53 @@ object srvEmpresas: TsrvEmpresas item Name = 'Empresas_ID_ALMACEN' DataType = datSmallInt + end + item + Name = 'EmpresasDatosBanco_SUFIJO_ACREEDOR' + DataType = datString + Size = 3 + DisplayLabel = 'Sufijo acreedor' + end + item + Name = 'EmpresasDatosBanco_IBAN' + DataType = datString + Size = 255 + end + item + Name = 'EmpresasDatosBanco_SWIFT' + DataType = datString + Size = 255 + DisplayLabel = 'BIC' + end + item + Name = 'EmpresasDatosBanco_NOMBRE_PRESENTADOR' + DataType = datString + Size = 255 + DisplayLabel = 'Presentador' + end + item + Name = 'EmpresasDatosBanco_SUFIJO_PRESENTADOR' + DataType = datString + Size = 3 + DisplayLabel = 'Sufijo presentador' + end + item + Name = 'EmpresasDatosBanco_NIF_CIF_PRESENTADOR' + DataType = datString + Size = 15 + DisplayLabel = 'NIF/CIF presentador' + end + item + Name = 'EmpresasDatosBanco_ENTIDAD_PRESENTADOR' + DataType = datString + Size = 15 + DisplayLabel = 'C'#243'd. Entidad presentador' + end + item + Name = 'EmpresasDatosBanco_SUCURSAL_PRESENTADOR' + DataType = datString + Size = 15 + DisplayLabel = 'C'#243'd. sucursal presentador' end> Left = 158 Top = 22 @@ -1123,9 +1232,9 @@ object srvEmpresas: TsrvEmpresas Top = 90 DiagramData = ''#13#10' '#13#10' '#13#10' '#13#10' '#13#10''#13#10 + 'idth="400" Height="300">'#13#10' '#13#10' '#13#10' '#13#10''#13#10 end object DABin2DataStreamer: TDABin2DataStreamer Left = 48 diff --git a/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.dfm b/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.dfm index 2aa9e1d..75c60fa 100644 --- a/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.dfm +++ b/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.dfm @@ -3,7 +3,7 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa Top = 108 BorderStyle = bsDialog Caption = 'Cambio de datos bancarios' - ClientHeight = 414 + ClientHeight = 469 ClientWidth = 449 Color = clBtnFace ParentFont = True @@ -11,7 +11,7 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa Position = poOwnerFormCenter DesignSize = ( 449 - 414) + 469) PixelsPerInch = 96 TextHeight = 13 object OKBtn: TButton @@ -44,11 +44,11 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa TabOrder = 2 object Label5: TLabel Left = 12 - Top = 31 - Width = 77 - Height = 13 + Top = 30 + Width = 91 + Height = 14 AutoSize = False - Caption = 'Banco:' + Caption = 'Nombre del banco:' end object Label2: TLabel Left = 12 @@ -69,10 +69,10 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa object Label4: TLabel Left = 12 Top = 120 - Width = 77 + Width = 91 Height = 13 AutoSize = False - Caption = 'DC:' + Caption = 'D'#237'gito de control:' end object Label6: TLabel Left = 11 @@ -96,12 +96,12 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa Width = 78 Height = 13 AutoSize = False - Caption = 'SWIFT:' + Caption = 'BIC:' end object eNombre: TDBEdit - Left = 95 + Left = 109 Top = 28 - Width = 223 + Width = 204 Height = 21 Color = clInfoBk DataField = 'NOMBRE' @@ -109,7 +109,7 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa TabOrder = 0 end object eCodEntidad: TDBEdit - Left = 95 + Left = 109 Top = 64 Width = 74 Height = 21 @@ -119,7 +119,7 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa TabOrder = 1 end object eCodSucursal: TDBEdit - Left = 95 + Left = 109 Top = 90 Width = 74 Height = 21 @@ -129,7 +129,7 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa TabOrder = 2 end object eDC: TDBEdit - Left = 95 + Left = 109 Top = 116 Width = 74 Height = 21 @@ -139,77 +139,178 @@ object fEditorDatosBancariosEmpresa: TfEditorDatosBancariosEmpresa TabOrder = 3 end object eCuenta: TDBEdit - Left = 95 - Top = 142 - Width = 223 + Left = 109 + Top = 143 + Width = 204 Height = 21 DataField = 'CUENTA' DataSource = dsDatosBancarios TabOrder = 4 end object eSWIFT: TDBEdit - Left = 95 + Left = 109 Top = 196 - Width = 223 + Width = 204 Height = 21 DataField = 'SWIFT' DataSource = dsDatosBancarios TabOrder = 5 end end - object GroupBox2: TGroupBox + object eIBAN: TDBEdit + Left = 117 + Top = 178 + Width = 204 + Height = 21 + DataField = 'IBAN' + DataSource = dsDatosBancarios + TabOrder = 3 + end + object GroupBox3: TGroupBox Left = 8 Top = 242 - Width = 329 - Height = 83 - Caption = 'Sufijos para normas CSB' - TabOrder = 3 - Visible = False - object Label7: TLabel + Width = 433 + Height = 215 + Caption = 'Configuraci'#243'n de norma SEPA' + TabOrder = 4 + object Label10: TLabel Left = 12 Top = 28 - Width = 77 + Width = 102 Height = 13 AutoSize = False - Caption = 'Norma 19:' + Caption = 'Sufijo del acreedor:' end - object Label1: TLabel + object Bevel4: TBevel + Left = 135 + Top = 67 + Width = 285 + Height = 10 + Shape = bsBottomLine + end + object Label12: TLabel Left = 12 - Top = 55 + Top = 68 + Width = 117 + Height = 13 + AutoSize = False + Caption = 'Datos del presentador:' + end + object Label13: TLabel + Left = 200 + Top = 28 + Width = 221 + Height = 13 + AutoSize = False + Caption = 'N'#250'mero proporcionado por el banco.' + end + object Label11: TLabel + Left = 12 + Top = 158 + Width = 102 + Height = 13 + AutoSize = False + Caption = 'NIF/CIF:' + end + object Label14: TLabel + Left = 12 + Top = 131 + Width = 102 + Height = 13 + AutoSize = False + Caption = 'Sufijo:' + end + object Label15: TLabel + Left = 216 + Top = 131 + Width = 185 + Height = 13 + AutoSize = False + Caption = 'N'#250'mero proporcionado por el banco.' + end + object Label16: TLabel + Left = 12 + Top = 102 + Width = 91 + Height = 14 + AutoSize = False + Caption = 'Nombre:' + end + object Label17: TLabel + Left = 12 + Top = 185 Width = 77 Height = 13 AutoSize = False - Caption = 'Norma 58:' + Caption = 'C'#243'd. entidad:' end - object eNorma19: TDBEdit - Left = 95 + object Label18: TLabel + Left = 225 + Top = 185 + Width = 77 + Height = 13 + AutoSize = False + Caption = 'C'#243'd. sucursal:' + end + object eSufijoAcreedor: TDBEdit + Left = 109 Top = 24 Width = 74 Height = 21 - DataField = 'SUFIJO_N19' + DataField = 'SUFIJO_ACREEDOR' DataSource = dsDatosBancarios MaxLength = 3 TabOrder = 0 end - object eNorma58: TDBEdit - Left = 95 - Top = 51 - Width = 74 + object eNIFCIFPresentador: TDBEdit + Left = 109 + Top = 154 + Width = 101 Height = 21 - DataField = 'SUFIJO_N58' + DataField = 'NIF_CIF_PRESENTADOR' + DataSource = dsDatosBancarios + MaxLength = 15 + TabOrder = 3 + end + object eSufijoPresentador: TDBEdit + Left = 109 + Top = 127 + Width = 101 + Height = 21 + DataField = 'SUFIJO_PRESENTADOR' DataSource = dsDatosBancarios MaxLength = 3 + TabOrder = 2 + end + object eNombrePresentador: TDBEdit + Left = 109 + Top = 100 + Width = 292 + Height = 21 + DataField = 'NOMBRE_PRESENTADOR' + DataSource = dsDatosBancarios TabOrder = 1 end - end - object eIBAN: TDBEdit - Left = 103 - Top = 177 - Width = 223 - Height = 21 - DataField = 'IBAN' - DataSource = dsDatosBancarios - TabOrder = 4 + object eCodEntidadPresentador: TDBEdit + Left = 109 + Top = 182 + Width = 101 + Height = 21 + DataField = 'ENTIDAD_PRESENTADOR' + DataSource = dsDatosBancarios + MaxLength = 4 + TabOrder = 4 + end + object eCodSucursalPresentador: TDBEdit + Left = 299 + Top = 182 + Width = 102 + Height = 21 + DataField = 'SUCURSAL_PRESENTADOR' + DataSource = dsDatosBancarios + MaxLength = 4 + TabOrder = 5 + end end object dsDatosBancarios: TDADataSource Left = 352 diff --git a/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.pas b/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.pas index 60cac84..35e006f 100644 --- a/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.pas +++ b/Source/ApplicationBase/Empresas/Views/uEditorDatosBancariosEmpresa.pas @@ -24,15 +24,27 @@ type eDC: TDBEdit; Label6: TLabel; eCuenta: TDBEdit; - GroupBox2: TGroupBox; - Label7: TLabel; - eNorma19: TDBEdit; - Label1: TLabel; - eNorma58: TDBEdit; eIBAN: TDBEdit; Label8: TLabel; eSWIFT: TDBEdit; Label9: TLabel; + GroupBox3: TGroupBox; + Label10: TLabel; + eSufijoAcreedor: TDBEdit; + Bevel4: TBevel; + Label12: TLabel; + Label13: TLabel; + Label11: TLabel; + eNIFCIFPresentador: TDBEdit; + Label14: TLabel; + eSufijoPresentador: TDBEdit; + Label15: TLabel; + Label16: TLabel; + eNombrePresentador: TDBEdit; + Label17: TLabel; + eCodEntidadPresentador: TDBEdit; + Label18: TLabel; + eCodSucursalPresentador: TDBEdit; protected FController : IDatosBancariosEmpresaController; FDatosBancarios: IBizEmpresasDatosBancarios; diff --git a/Source/ApplicationBase/Empresas/Views/uEditorEmpresa.dfm b/Source/ApplicationBase/Empresas/Views/uEditorEmpresa.dfm index a452754..913ec6e 100644 --- a/Source/ApplicationBase/Empresas/Views/uEditorEmpresa.dfm +++ b/Source/ApplicationBase/Empresas/Views/uEditorEmpresa.dfm @@ -22,6 +22,8 @@ inherited fEditorEmpresa: TfEditorEmpresa inherited lblDesbloquear: TcxLabel Left = 576 ExplicitLeft = 576 + AnchorX = 621 + AnchorY = 14 end end inherited TBXDock: TTBXDock @@ -111,34 +113,34 @@ inherited fEditorEmpresa: TfEditorEmpresa ExplicitWidth = 660 ExplicitHeight = 425 inherited PngSpeedButton1: TPngSpeedButton - Left = 615 + Left = 598 Top = 295 - ExplicitLeft = 615 + ExplicitLeft = 598 ExplicitTop = 295 end inherited PngSpeedButton2: TPngSpeedButton - Left = 615 + Left = 598 Top = 267 - ExplicitLeft = 615 + ExplicitLeft = 598 ExplicitTop = 267 end inherited eCalle: TcxDBTextEdit - Top = 267 - Style.LookAndFeel.SkinName = '' - StyleDisabled.LookAndFeel.SkinName = '' - StyleFocused.LookAndFeel.SkinName = '' - StyleHot.LookAndFeel.SkinName = '' - ExplicitTop = 267 - ExplicitWidth = 234 - Width = 234 - end - inherited eCodigoPostal: TcxDBTextEdit Top = 294 Style.LookAndFeel.SkinName = '' StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitTop = 294 + ExplicitWidth = 234 + Width = 234 + end + inherited eCodigoPostal: TcxDBTextEdit + Top = 321 + Style.LookAndFeel.SkinName = '' + StyleDisabled.LookAndFeel.SkinName = '' + StyleFocused.LookAndFeel.SkinName = '' + StyleHot.LookAndFeel.SkinName = '' + ExplicitTop = 321 end inherited ePaginaWeb: TcxDBTextEdit Left = 508 @@ -177,12 +179,12 @@ inherited fEditorEmpresa: TfEditorEmpresa Width = 164 end inherited cxDBMemo1: TcxDBMemo - Top = 372 + Top = 399 Style.LookAndFeel.SkinName = '' StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitTop = 372 + ExplicitTop = 399 ExplicitWidth = 329 ExplicitHeight = 64 Height = 64 @@ -281,39 +283,39 @@ inherited fEditorEmpresa: TfEditorEmpresa Width = 230 end inherited eParamMargen: TcxDBSpinEdit - Top = 216 + Top = 243 Style.LookAndFeel.SkinName = '' StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitTop = 216 + ExplicitTop = 243 end inherited eParamTiempo: TcxDBCurrencyEdit - Top = 216 + Top = 243 Style.LookAndFeel.SkinName = '' StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' - ExplicitTop = 216 + ExplicitTop = 243 end inherited cbProvincia: TcxDBComboBox - Top = 294 - Style.LookAndFeel.SkinName = '' - StyleDisabled.LookAndFeel.SkinName = '' - StyleFocused.LookAndFeel.SkinName = '' - StyleHot.LookAndFeel.SkinName = '' - ExplicitTop = 294 - ExplicitWidth = 91 - Width = 91 - end - inherited cbPoblacion: TcxDBComboBox Top = 321 - Properties.OnInitPopup = nil Style.LookAndFeel.SkinName = '' StyleDisabled.LookAndFeel.SkinName = '' StyleFocused.LookAndFeel.SkinName = '' StyleHot.LookAndFeel.SkinName = '' ExplicitTop = 321 + ExplicitWidth = 91 + Width = 91 + end + inherited cbPoblacion: TcxDBComboBox + Top = 348 + Properties.OnInitPopup = nil + Style.LookAndFeel.SkinName = '' + StyleDisabled.LookAndFeel.SkinName = '' + StyleFocused.LookAndFeel.SkinName = '' + StyleHot.LookAndFeel.SkinName = '' + ExplicitTop = 348 ExplicitWidth = 234 Width = 234 end @@ -337,6 +339,14 @@ inherited fEditorEmpresa: TfEditorEmpresa ExplicitWidth = 202 Width = 202 end + inherited cbAlmacen: TcxComboBox + Top = 192 + Style.LookAndFeel.SkinName = '' + StyleDisabled.LookAndFeel.SkinName = '' + StyleFocused.LookAndFeel.SkinName = '' + StyleHot.LookAndFeel.SkinName = '' + ExplicitTop = 192 + end end end end diff --git a/Source/Modulos/Banca electronica/Controller/BancaElectronica_controller.dpk b/Source/Modulos/Banca electronica/Controller/BancaElectronica_controller.dpk index 4630911..dec9a44 100644 Binary files a/Source/Modulos/Banca electronica/Controller/BancaElectronica_controller.dpk and b/Source/Modulos/Banca electronica/Controller/BancaElectronica_controller.dpk differ diff --git a/Source/Modulos/Banca electronica/Controller/BancaElectronica_controller.dproj b/Source/Modulos/Banca electronica/Controller/BancaElectronica_controller.dproj index 1dde002..d19a7ce 100644 --- a/Source/Modulos/Banca electronica/Controller/BancaElectronica_controller.dproj +++ b/Source/Modulos/Banca electronica/Controller/BancaElectronica_controller.dproj @@ -53,6 +53,7 @@ + @@ -63,6 +64,7 @@ + diff --git a/Source/Modulos/Banca electronica/Controller/View/uIEditorExportacionNorma19SEPA.pas b/Source/Modulos/Banca electronica/Controller/View/uIEditorExportacionNorma19SEPA.pas new file mode 100644 index 0000000..1bcd099 --- /dev/null +++ b/Source/Modulos/Banca electronica/Controller/View/uIEditorExportacionNorma19SEPA.pas @@ -0,0 +1,32 @@ +unit uIEditorExportacionNorma19SEPA; + +interface + +type + IEditorExportacionNorma19SEPA = interface + ['{AE5B7884-D54E-4384-821E-72A96891CC8C}'] + + procedure SetCodigoEntidad(const AValue: String); + function GetCodigoEntidad : String; + property CodigoEntidad : String read GetCodigoEntidad write SetCodigoEntidad; + + procedure SetCodigoAgencia(const AValue: String); + function GetCodigoAgencia : String; + property CodigoAgencia : String read GetCodigoAgencia write SetCodigoAgencia; + + procedure SetFechaCargo(const AValue: TDateTime); + function GetFechaCargo : TDateTime; + property FechaCargo : TDateTime read GetFechaCargo write SetFechaCargo; + + procedure SetFichero(const AValue: String); + function GetFichero : String; + property Fichero : String read GetFichero write SetFichero; + + function ShowModal : Integer; + procedure Release; + end; + + +implementation + +end. diff --git a/Source/Modulos/Banca electronica/Controller/uBancaElectronicaController.pas b/Source/Modulos/Banca electronica/Controller/uBancaElectronicaController.pas index acbe292..18d02e8 100644 --- a/Source/Modulos/Banca electronica/Controller/uBancaElectronicaController.pas +++ b/Source/Modulos/Banca electronica/Controller/uBancaElectronicaController.pas @@ -26,12 +26,14 @@ unit uBancaElectronicaController; interface uses - Classes, SysUtils, uDADataTable; + Classes, SysUtils, uDADataTable, uBizEmpresas, + uBizRemesasCliente; type IBancaElectronicaController = interface - ['{9E37DF46-D02C-47C4-BCBE-414FB97A7751}'] + ['{8C646A34-AFDF-4F09-A8BA-D6D40B5A91B8}'] procedure GenerarFicheroNorma19 (const IDRemesa : Integer); + procedure GenerarFicheroNorma19SEPA (const IDRemesa : Integer); procedure GenerarFicheroNorma32 (const IDRemesa : Integer); end; @@ -39,12 +41,16 @@ type private function VerEditorNorma19(var Entidad : String; var Oficina : String; var AFechaCargo : TDateTime; var AFileName : String): Boolean; - + function VerEditorNorma19SEPA(var Entidad : String; var Oficina : String; + var AFechaCargo : TDateTime; var AFileName : String): Boolean; function VerEditorNorma32(var Identificador : String; var ACodigoINE : String; var Entidad : String; var Oficina : String; var AFileName : String): Boolean; + function ValidarRemesaParaSEPA(ARemesa : IBizRemesaCliente): Boolean; + function ValidarEmpresaParaSEPA(AEmpresa : IBizEmpresa) : Boolean; public procedure GenerarFicheroNorma19 (const IDRemesa : Integer); + procedure GenerarFicheroNorma19SEPA (const IDRemesa : Integer); procedure GenerarFicheroNorma32 (const IDRemesa : Integer); end; @@ -53,14 +59,15 @@ implementation uses Forms, cxControls, Controls, Windows, CVBNorma1958CSB, CVBNorma32CSB, - uEditorRegistryUtils, + uEditorRegistryUtils, uStringsUtils, - uBizEmpresas, uEmpresasController, + uEmpresasController, schRemesasClienteClient_Intf, uBizContactos, uClientesController, - uBizRemesasCliente, uRemesasClienteController, schRemesasClienteClient_Intf, + uRemesasClienteController, schRecibosClienteClient_Intf, Dialogs, uIEditorExportacionNorma19, uIEditorExportacionNorma32, uBizRecibosCliente, - schContactosClient_Intf, schEmpresasClient_Intf; + schContactosClient_Intf, schEmpresasClient_Intf, + uIEditorExportacionNorma19SEPA, CVBNorma19SEPA; { TBancaElectronicaController } @@ -194,6 +201,155 @@ begin end; end; +procedure TBancaElectronicaController.GenerarFicheroNorma19SEPA( + const IDRemesa: Integer); +var + ARemesasController : IRemesasClienteController; + AEmpresasController : IEmpresasController; + AClientesController : IClientesController; + + ARemesa : IBizRemesaCliente; + AEmpresa : IBizEmpresa; + ACliente : IBizCliente; + + ANorma19 : TCVBNorma19SEPA; + I: integer; + AEntidad : String; + AOficina : String; +begin + ARemesasController := TRemesasClienteController.Create; + AEmpresasController := TEmpresasController.Create; + AClientesController := TClientesController.Create; + + try + ARemesa := ARemesasController.Buscar(IDRemesa); + ARemesa.DataTable.Active := True; + ARemesasController.RecuperarRecibos(ARemesa); + + if ARemesa.ID <> IDRemesa then + raise Exception.CreateFmt('No existe la remesa con ID %d', [IDRemesa]); + + AEmpresa := AEmpresasController.Buscar(ARemesa.ID_EMPRESA); + AEmpresa.DataTable.Active := True; + + if AEmpresa.ID <> ARemesa.ID_EMPRESA then + raise Exception.CreateFmt('No existe la empresa con ID %d', [ARemesa.ID_EMPRESA]); + + ANorma19 := TCVBNorma19SEPA.Create(NIL); + + ANorma19.FNomFic := 'REM' + ARemesa.REFERENCIA + '.C19'; + ANorma19.Fichero.Fecha := Date; + ANorma19.Fichero.Identificador := AEmpresa.NIF_CIF + ARemesa.REFERENCIA; + ANorma19.FechaCobro := Date; + + // Buscar los datos bancarios + with AEmpresa.DatosBancarios do + begin + First; + if Locate('ID', ARemesa.ID_DATOS_BANCO, []) then + begin + AEntidad := ENTIDAD; + AOficina := SUCURSAL; + end; + end; + + ValidarEmpresaParaSEPA(AEmpresa); + + ValidarRemesaParaSEPA(ARemesa); + + if not VerEditorNorma19(AEntidad, AOficina, ANorma19.FechaCobro, ANorma19.FNomFic) then + Exit; + + ShowHourglassCursor; + + ANorma19.Receptor.Entidad := AEntidad; + ANorma19.Receptor.Oficina := AOficina; + + with ANorma19 do + begin + Depura := True; + + Abrir; + + // PRESENTADOR + if AEmpresa.DatosBancarios.NIF_CIF_PRESENTADORIsNull then + Presentador.NIFCIF := AEmpresa.NIF_CIF + else + Presentador.NIFCIF := AEmpresa.DatosBancarios.NIF_CIF_PRESENTADOR; + + if AEmpresa.DatosBancarios.SUFIJO_PRESENTADORIsNull then + Presentador.Sufijo := AEmpresa.DatosBancarios.SUFIJO_ACREEDOR + else + Presentador.Sufijo := AEmpresa.DatosBancarios.SUFIJO_PRESENTADOR; + + if AEmpresa.DatosBancarios.NOMBRE_PRESENTADORIsNull then + Presentador.Nombre := AEmpresa.NOMBRE + else + Presentador.Nombre := AEmpresa.DatosBancarios.NOMBRE_PRESENTADOR; + + GenerarCabeceraPresentador; + + + // ACREEDOR + Acreedor.NIFCIF := AEmpresa.NIF_CIF; + Acreedor.Nombre := AEmpresa.NOMBRE; + Acreedor.Direccion1 := AEmpresa.CALLE; + + if not AEmpresa.CODIGO_POSTALIsNull then + Acreedor.Direccion2 := AEmpresa.CODIGO_POSTAL + ' '; + + Acreedor.Direccion2 := Acreedor.Direccion2 + AEmpresa.POBLACION; + Acreedor.Direccion3 := AEmpresa.PROVINCIA; + Acreedor.Pais := 'ES'; + Acreedor.Sufijo := AEmpresa.DatosBancarios.SUFIJO_ACREEDOR; + Acreedor.CuentaIBAN := AEmpresa.DatosBancarios.IBAN; + + GenerarCabeceraAcreedor; + + ARemesa.Recibos.DataTable.First; + for I := 0 to (ARemesa.Recibos.DataTable.RecordCount - 1) do + begin + //ACliente := (AClientesController.Buscar(ARemesa.Recibos.ID_CLIENTE) as IBizCliente); + //ACliente.Open; + + // DEUDOR + Deudor.Nombre := ARemesa.Recibos.NOMBRE_CLIENTE; + Deudor.Direccion1 := ARemesa.Recibos.CALLE_CLIENTE; + + if not ARemesa.Recibos.CODIGO_POSTAL_CLIENTEIsNull then + Deudor.Direccion2 := ARemesa.Recibos.CODIGO_POSTAL_CLIENTE + ' '; + + Deudor.Direccion2 := Deudor.Direccion2 + ARemesa.Recibos.POBLACION_CLIENTE; + Deudor.Direccion3 := ARemesa.Recibos.PROVINCIA_CLIENTE; + Deudor.Pais := 'ES'; + Deudor.CuentaIBAN := ARemesa.Recibos.IBAN_CLIENTE; + Deudor.CodigoBIC := ARemesa.Recibos.SWIFT_CLIENTE; + + Adeudo.Referencia := ARemesa.Recibos.REFERENCIA; + Adeudo.Importe := ARemesa.Recibos.IMPORTE_TOTAL; + + GenerarRegistroAdeudo; + + ARemesa.Recibos.DataTable.Next; + end; + + GenerarTotalAcreedor; + Cerrar; + + ShowMessage('Se ha generado el fichero'); + end; + finally + HideHourglassCursor; + ARemesasController := NIL; + AEmpresasController := NIL; + AClientesController := NIL; + + AEmpresa := NIL; + + FreeAndNil(ANorma19); + end; +end; + procedure TBancaElectronicaController.GenerarFicheroNorma32( const IDRemesa: Integer); var @@ -330,6 +486,79 @@ begin end; end; +function TBancaElectronicaController.ValidarEmpresaParaSEPA( + AEmpresa: IBizEmpresa): Boolean; +var + AMensaje : string; +begin + Result := False; + + AMensaje := ''; + + if AEmpresa.DatosBancarios.IBANIsNull then + AMensaje := AMensaje + '- Falta el código IBAN' + #13 + #10; + + if AEmpresa.DatosBancarios.SWIFTIsNull then + AMensaje := AMensaje + '- Falta el código BIC/SWIFT' + #13 + #10; + + if AEmpresa.DatosBancarios.SUFIJO_ACREEDORIsNull then + AMensaje := AMensaje + '- Falta el sufijo del acreedor' + #13 + #10; + + if not EsCadenaVacia(AMensaje) then + begin + AMensaje := 'No se puede generar el fichero SEPA. Se han encontrado los siguientes problemas ' + #13 + #10 + + 'en los datos bancarios (' + AEmpresa.DatosBancarios.NOMBRE + ')' + #13 + #10 + + 'de la empresa (' + AEmpresa.NOMBRE + '):' + #13 + #10 + #13 + #10 + AMensaje; + raise Exception.Create (AMensaje) + end + else + Result := True; + +end; + +function TBancaElectronicaController.ValidarRemesaParaSEPA( + ARemesa: IBizRemesaCliente): Boolean; +var + AClienteController : TClientesController; + ACliente : IBizCliente; + ARecibo : IBizRecibosCliente; + i : integer; + AMensaje : string; +begin + Result := False; + AMensaje := ''; + AClienteController := TClientesController.Create; + + try + ARemesa.Recibos.First; + for i := 0 to ARemesa.Recibos.RecordCount - 1 do + begin + ACliente := (AClienteController.Buscar(ARemesa.Recibos.ID_CLIENTE) as IBizCliente); + ACliente.Open; + + if ACliente.DatosBancarios.IBANIsNull then + AMensaje := AMensaje + '- Cliente ' + ACliente.NOMBRE + ': falta el código IBAN' + #13 + #10; + + if ACliente.DatosBancarios.SWIFTIsNull then + AMensaje := AMensaje + '- Cliente ' + ACliente.NOMBRE + ': falta el código BIC/SWIFT' + #13 + #10; + + ACliente := NIL; + ARemesa.Recibos.Next; + end; + finally + FreeAndNil(AClienteController); + end; + + if not EsCadenaVacia(AMensaje) then + begin + AMensaje := 'No se puede generar el fichero SEPA. Se han encontrado los siguientes problemas en los recibos de la remesa:' + + #13 + #10 + #13 + #10 + AMensaje; + raise Exception.Create (AMensaje) + end + else + Result := True; +end; + function TBancaElectronicaController.VerEditorNorma19 ( var Entidad : String; var Oficina : String; var AFechaCargo : TDateTime; var AFileName : String): Boolean; @@ -337,7 +566,7 @@ var AEditor : IEditorExportacionNorma19; begin Result := False; - AEditor := NIL; + AEditor := NIL; ShowHourglassCursor; try CreateEditor('EditorExportacionNorma19', IEditorExportacionNorma19, AEditor); @@ -365,7 +594,45 @@ begin AEditor.Release; finally AEditor := NIL; - end; + end; +end; + + +function TBancaElectronicaController.VerEditorNorma19SEPA(var Entidad, + Oficina: String; var AFechaCargo: TDateTime; var AFileName: String): Boolean; +var + AEditor : IEditorExportacionNorma19SEPA; +begin + Result := False; + AEditor := NIL; + ShowHourglassCursor; + try + CreateEditor('EditorExportacionNorma19SEPA', IEditorExportacionNorma19SEPA, AEditor); + with AEditor do + begin + CodigoEntidad := Entidad; + CodigoAgencia := Oficina; + FechaCargo := AFechaCargo; + Fichero := AFileName; + end; + finally + HideHourglassCursor; + end; + + if Assigned(AEditor) then + try + if (AEditor.ShowModal = mrOk) then + begin + Entidad := AEditor.CodigoEntidad; + Oficina := AEditor.CodigoAgencia; + AFechaCargo := AEditor.FechaCargo; + AFileName := AEditor.Fichero; + Result := True; + end; + AEditor.Release; + finally + AEditor := NIL; + end; end; diff --git a/Source/Modulos/Banca electronica/Utiles/CVBNorma19SEPA.pas b/Source/Modulos/Banca electronica/Utiles/CVBNorma19SEPA.pas new file mode 100644 index 0000000..ec6688d --- /dev/null +++ b/Source/Modulos/Banca electronica/Utiles/CVBNorma19SEPA.pas @@ -0,0 +1,718 @@ +unit CVBNorma19SEPA; + +interface + +uses + Messages, SysUtils, Classes, Dialogs; + +type + TSEPAPresentador = record + Nombre : string; + NIFCIF : string; + Sufijo : string; + end; + + TSEPAFichero = record + Fecha : TDateTime; + Identificador : string; + end; + + TSEPAReceptor = record + Oficina : string; + Entidad : string; + end; + + TSEPAAcreedor = record + Nombre : string; + Direccion1 : string; + Direccion2 : string; + Direccion3 : string; + Pais : string; + CuentaIBAN : string; + Sufijo : string; + NIFCIF : string; + end; + + TSEPADeudor = record + Nombre : string; + Direccion1 : string; + Direccion2 : string; + Direccion3 : string; + Pais : string; + CuentaIBAN : string; + CodigoBIC : string; + end; + + TSEPAAdeudo = record + Referencia : string; + Importe : Currency; + end; + + + + TCVBNorma19SEPA = class(TComponent) + private + pReg: array[0..602] of char; // 2 digitos más por el #13 #10 + + _LL_: integer; // Longitud Línea. Aquí almacenamos el valor 164 para usarlo + // en el resto del componente. + + _INDICA_: string; + + _CERO_, _SPCE_: char; + + _MSK_EU_: string; + + _PAIS_DEFECTO_ : string; + + HayError: boolean; + + FDepura: boolean; + + + NFic: file; + + FEnCasoError: TNotifyEvent; + sReg: string; + CRLF: string; + sPrimerosDigitos: string; + + + cSumaImportesTotalesAdeudos : Currency; // Suma de los importes (campo 8) en los registros 003 (adeudos) + iNumeroRegistrosAdeudos: integer; // Número de registros individuales '003', adeudos + iNumeroRegistrosAcreedor : integer; // Número de registros de un bloque de acreedor (002, 003 y 004) + + iNumeroRegistros: integer; // Nº de registros individuales (tipo '003') + iTotalRegistros: integer; // Total de registros del fichero incluida el registro cabecera y el registro de totales generales + + procedure ComprobarDatos(sParte: string); + + + + protected + procedure Error(iErr: integer); dynamic; + public + NrError: integer; + FNomFic: string; // Nombre del archivo en disco + + Presentador : TSEPAPresentador; + Fichero : TSEPAFichero; + Receptor : TSEPAReceptor; + Acreedor : TSEPAAcreedor; + Deudor : TSEPADeudor; + Adeudo : TSEPAAdeudo; + + FecAbono: TDateTime; + + FechaCobro : TDateTime; + + constructor Create(AOwner: TComponent); override; + procedure Abrir; + procedure GenerarCabeceraPresentador; + procedure GenerarCabeceraAcreedor; + procedure GenerarRegistroAdeudo; + procedure GenerarTotalAcreedor; + procedure Cerrar; + published + property NomFichero: string Read FNomFic Write FNomFic; + property Depura: boolean Read FDepura Write FDepura default False; + property EnCasoError: TNotifyEvent Read FEnCasoError Write FEnCasoError; + { Published declarations } + end; + +implementation + +uses + Windows, uStringsUtils, CVBUtils; + +constructor TCVBNorma19SEPA.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + {Asignar la propiedades por defecto} + + _LL_ := high(pReg); + + _INDICA_ := '<--'; + _CERO_ := '0'; + _SPCE_ := ' '; + + _MSK_EU_ := '00000000.00'; + + _PAIS_DEFECTO_ := 'ES'; + +end; + +//******************************************************************************* + +procedure TCVBNorma19SEPA.Abrir; +begin + HayError := False; + + AssignFile(NFic, FNomFic); +{$I+} + rewrite(Nfic, _LL_); +{$I-} + if IOResult <> 0 then + Error(0); + + iNumeroRegistros := 0; + iTotalRegistros := 0; + + {fTotImpOrdEu := 0; + iTotImpOrdPts := 0; + iTotDomOrd := 0; + iTotRegOrd := 0; + + fTotImpCinEu := 0; + iTotImpCinPts := 0; + iTotDomCin := 0; + + + IniOrdenan; + IniRegistro;} + + CRLF := #13 + #10; +end; + + +procedure TCVBNorma19SEPA.GenerarCabeceraPresentador; +var + auxDC : integer; + auxIdentificador : string; +begin + HayError := False; + sReg := ''; + + ComprobarDatos('01'); + + // Código de registro (2) + sReg := '01'; + + // Versión del cuaderno (5) + sReg := sReg + '19143'; + + // Número del dato (3) + sReg := sReg + '001'; // Adeudo directo + + // Identificador del presentador (35) + auxIdentificador := Presentador.NIFCIF + _PAIS_DEFECTO_ + '00'; + auxDC := Modulo9710(auxIdentificador); + sReg := sReg + _PAIS_DEFECTO_; + sReg := sReg + Ajusta(IntToStr(auxDC), 'I', 2, _CERO_); + sReg := sReg + Ajusta(Presentador.Sufijo, 'I', 3, _CERO_); + sReg := sReg + Ajusta(Presentador.NIFCIF, 'D', 28, _SPCE_); + + // Nombre del presentador (70) + sReg := sReg + Ajusta(Presentador.Nombre, 'D', 70, _SPCE_); + + // Fecha de creación del fichero (8) + sReg := sReg + Ajusta(FormatDateTime('yyyymmdd', Fichero.Fecha), 'I', 8, _SPCE_); + + // Identificación del fichero (35) + auxIdentificador := 'PRE' + FormatDateTime('yyyymmddhhnnsszzz', Now); + auxIdentificador := auxIdentificador + Fichero.Identificador; + auxIdentificador := UpperCase(ReplaceAccents(auxIdentificador)); + auxIdentificador := StringReplace(auxIdentificador, ' ' , '', [rfReplaceAll]); + sReg := sReg + Ajusta(auxIdentificador, 'D', 35, _SPCE_); + + // Entidad receptora (4) + sReg := sReg + Ajusta(Receptor.Entidad, 'I', 4, _CERO_); + + // Oficina receptora (4) + sReg := sReg + Ajusta(Receptor.Oficina, 'I', 4, _CERO_); + + // Libre (434) + sReg := sReg + Ajusta('', 'D', 434, _SPCE_); + + // Fin + sReg := sReg + CRLF; + + StrPCopy(@pReg, sReg); + BlockWrite(NFic, pReg, 1); + + if not (length(sReg) = _LL_) then + Error(_LL_); + + Inc(iTotalRegistros); +end; + +procedure TCVBNorma19SEPA.GenerarRegistroAdeudo; +var + auxDC : integer; + auxCadena : string; +begin + HayError := False; + sReg := ''; + + ComprobarDatos('03'); + + // Código de registro (2) + sReg := '03'; + + // Versión del cuaderno (5) + sReg := sReg + '19143'; + + // Número de dato (3) + sReg := sReg + '003'; + + // Referencia del adeudo (AT-10) (35) + auxCadena := Adeudo.Referencia; + auxCadena := auxCadena + FormatDateTime('yyyymmddhhnnsszzz', Now); + sReg := sReg + Ajusta(auxCadena, 'D', 35, _SPCE_); + + // Referencia única del mandato (AT-01) (35) + sReg := sReg + Ajusta(Adeudo.Referencia, 'D', 35, _SPCE_); + + // Tipo de adeudo (AT-21) (4) + sReg := sReg + 'OOFF'; + + // Categoría del propósito (AT-59) (4) + sReg := sReg + Ajusta('', 'D', 4, _SPCE_); + + // Importe del adeudo (AT-06) (11) + auxCadena := FormatFloat(_MSK_EU_, Adeudo.Importe); + auxCadena := StringReplace(auxCadena, DecimalSeparator, '', [rfReplaceAll]); + sReg := sReg + Ajusta(auxCadena, 'I', 11, _CERO_); + + // Fecha de firma del mandato (AT-25) (8) + sReg := sReg + Ajusta(FormatDateTime('yyyymmdd', Now), 'D', 8, _CERO_); + + // Entidad del deudor (AT-13) (11) + sReg := sReg + Ajusta(Deudor.CodigoBIC, 'D', 11, _SPCE_); + + // Nombre del deudor (AT-14) (70) + sReg := sReg + Ajusta(Deudor.Nombre, 'D', 70, _SPCE_); + + // Dirección del deudor D1 (AT-09) (50) + sReg := sReg + Ajusta(Deudor.Direccion1, 'D', 50, _SPCE_); + + // Dirección del deudor D2 (AT-09) (50) + sReg := sReg + Ajusta(Deudor.Direccion2, 'D', 50, _SPCE_); + + // Dirección del deudor D3 (AT-09) (40) + sReg := sReg + Ajusta(Deudor.Direccion3, 'D', 40, _SPCE_); + + // País del deudor (AT-09) (2) + sReg := sReg + _PAIS_DEFECTO_; + + // Tipo de identificación del deudor (1) + sReg := sReg + ' '; // optativo + + // Identificación del deudor (código) (AT-27) (36) + sReg := sReg + Ajusta('', 'D', 36, _SPCE_); + + // Identificación del deudor emisor código (otro) (AT-27) (35) + sReg := sReg + Ajusta('', 'D', 35, _SPCE_); + + // Identificador de la cuenta del deudor (1) + sReg := sReg + 'A'; // A -> IBAN + + // Cuenta del deudor (AT-07) (34) + sReg := sReg + Ajusta(Deudor.CuentaIBAN, 'D', 34, _SPCE_); + + // Propósito del adeudo (AT-58) (4) + sReg := sReg + Ajusta('', 'D', 4, _SPCE_); + + // Concepto (AT-22) (140) + sReg := sReg + Ajusta('', 'D', 140, _SPCE_); + + // Libre (19) + sReg := sReg + Ajusta('', 'D', 19, _SPCE_); + + // Fin + sReg := sReg + CRLF; + + StrPCopy(@pReg, sReg); + BlockWrite(NFic, pReg, 1); + + if not (length(sReg) = _LL_) then + Error(_LL_); + + cSumaImportesTotalesAdeudos := cSumaImportesTotalesAdeudos + Adeudo.Importe; + + Inc(iNumeroRegistrosAcreedor); + Inc(iNumeroRegistrosAdeudos); + + Inc(iTotalRegistros); + Inc(iNumeroRegistros); +end; + +procedure TCVBNorma19SEPA.GenerarTotalAcreedor; +var + auxDC : integer; + auxIdentificador, auxCadena : string; +begin + HayError := False; + sReg := ''; + + Inc(iNumeroRegistrosAcreedor); + + // Código de registro (2) + sReg := '04'; + + // Identificador del acreedor (AT-02) (35) + auxIdentificador := Acreedor.NIFCIF + _PAIS_DEFECTO_ + '00'; + auxDC := Modulo9710(auxIdentificador); + sReg := sReg + _PAIS_DEFECTO_; + sReg := sReg + Ajusta(IntToStr(auxDC), 'I', 2, _CERO_); + sReg := sReg + Ajusta(Acreedor.Sufijo, 'I', 3, _CERO_); + sReg := sReg + Ajusta(Acreedor.NIFCIF, 'D', 28, _SPCE_); + + // Fecha de cobro (AT-11) (8) + sReg := sReg + Ajusta(FormatDateTime('yyyymmdd', FechaCobro), 'I', 8, _SPCE_); + + // Total de importes (17) + auxCadena := FormatFloat(_MSK_EU_, cSumaImportesTotalesAdeudos); + auxCadena := StringReplace(auxCadena, DecimalSeparator, '', [rfReplaceAll]); + sReg := sReg + Ajusta(auxCadena, 'I', 17, _CERO_); + + // Número de adeudos (8) + sReg := sReg + Ajusta(IntToStr(iNumeroRegistrosAdeudos), 'I', 8, _CERO_); + + // Total de registros (10) + sReg := sReg + Ajusta(IntToStr(iNumeroRegistrosAcreedor), 'I', 10, _CERO_); + + // Libre (520) + sReg := sReg + Ajusta('', 'D', 520, _SPCE_); + + // Fin + sReg := sReg + CRLF; + + StrPCopy(@pReg, sReg); + BlockWrite(NFic, pReg, 1); + + if not (length(sReg) = _LL_) then + Error(_LL_); + + Inc(iTotalRegistros); + + Inc(iNumeroRegistrosAcreedor); + + // Código de registro (2) + sReg := '05'; + + // Identificador del acreedor (AT-02) (35) + auxIdentificador := Acreedor.NIFCIF + _PAIS_DEFECTO_ + '00'; + auxDC := Modulo9710(auxIdentificador); + sReg := sReg + _PAIS_DEFECTO_; + sReg := sReg + Ajusta(IntToStr(auxDC), 'I', 2, _CERO_); + sReg := sReg + Ajusta(Acreedor.Sufijo, 'I', 3, _CERO_); + sReg := sReg + Ajusta(Acreedor.NIFCIF, 'D', 28, _SPCE_); + + // Total de importes (17) + auxCadena := FormatFloat(_MSK_EU_, cSumaImportesTotalesAdeudos); + auxCadena := StringReplace(auxCadena, DecimalSeparator, '', [rfReplaceAll]); + sReg := sReg + Ajusta(auxCadena, 'I', 17, _CERO_); + + // Número de adeudos (8) + sReg := sReg + Ajusta(IntToStr(iNumeroRegistrosAdeudos), 'I', 8, _CERO_); + + // Total de registros (10) + sReg := sReg + Ajusta(IntToStr(iNumeroRegistrosAcreedor), 'I', 10, _CERO_); + + // Libre (528) + sReg := sReg + Ajusta('', 'D', 528, _SPCE_); + + // Fin + sReg := sReg + CRLF; + + StrPCopy(@pReg, sReg); + BlockWrite(NFic, pReg, 1); + + if not (length(sReg) = _LL_) then + Error(_LL_); + + Inc(iTotalRegistros); +end; + +procedure TCVBNorma19SEPA.GenerarCabeceraAcreedor; +var + auxDC : integer; + auxIdentificador : string; +begin + HayError := False; + sReg := ''; + + iNumeroRegistrosAdeudos := 0; + iNumeroRegistrosAcreedor := 0; + cSumaImportesTotalesAdeudos := 0; + + ComprobarDatos('02'); + + // Código de registro (2) + sReg := '02'; + + // Versión del cuaderno (5) + sReg := sReg + '19143'; + + // Número de dato (3) + sReg := sReg + '002'; + + // Identificador del acreedor (AT-02) (35) + auxIdentificador := Acreedor.NIFCIF + _PAIS_DEFECTO_ + '00'; + auxDC := Modulo9710(auxIdentificador); + sReg := sReg + _PAIS_DEFECTO_; + sReg := sReg + Ajusta(IntToStr(auxDC), 'I', 2, _CERO_); + sReg := sReg + Ajusta(Acreedor.Sufijo, 'I', 3, _CERO_); + sReg := sReg + Ajusta(Acreedor.NIFCIF, 'D', 28, _SPCE_); + + // Fecha de cobro (AT-11) (8) + sReg := sReg + Ajusta(FormatDateTime('yyyymmdd', FechaCobro), 'I', 8, _SPCE_); + + // Nombre del acreedor (AT-03) (70) + sReg := sReg + Ajusta(Acreedor.Nombre, 'D', 70, _SPCE_); + + // Dirección del acreedor D1 (AT-05) (50) + sReg := sReg + Ajusta(Acreedor.Direccion1, 'D', 50, _SPCE_); + + // Dirección del acreedor D2 (AT-05) (50) + sReg := sReg + Ajusta(Acreedor.Direccion2, 'D', 50, _SPCE_); + + // Dirección del acreedor D3 (AT-05) (40) + sReg := sReg + Ajusta(Acreedor.Direccion3, 'D', 40, _SPCE_); + + // País del acreedor (AT-05) (2) + sReg := sReg + _PAIS_DEFECTO_; + + // Cuenta del acreedor (AT-04) (34) + sReg := sReg + Ajusta(Acreedor.CuentaIBAN, 'D', 34, _SPCE_); + + // Libre (301) + sReg := sReg + Ajusta('', 'D', 301, _SPCE_); + + // Fin + sReg := sReg + CRLF; + + StrPCopy(@pReg, sReg); + BlockWrite(NFic, pReg, 1); + + if not (length(sReg) = _LL_) then + Error(_LL_); + + Inc(iNumeroRegistrosAcreedor); + Inc(iTotalRegistros); +end; + + + +procedure TCVBNorma19SEPA.ComprobarDatos(sParte: string); +var + bError: boolean; +begin + bError := False; + + if sParte = '01' then // cabecera / presentador + begin + if EsCadenaVacia(Presentador.NIFCIF) then + begin + Presentador.NIFCIF := _INDICA_; + bError := True; + end + else + Presentador.NIFCIF := UpperCase(Presentador.NIFCIF); + + if EsCadenaVacia(Presentador.Sufijo) then + begin + Presentador.Sufijo := _INDICA_; + bError := True; + end; + + if EsCadenaVacia(Presentador.Nombre) then + begin + Presentador.Nombre := _INDICA_; + bError := True; + end + else + Presentador.Nombre := UpperCase(ReplaceAccents(Presentador.Nombre)); + + if EsCadenaVacia(Fichero.Identificador) then + begin + Fichero.Identificador := _INDICA_; + bError := True; + end; + + if EsCadenaVacia(Receptor.Entidad) then + begin + Receptor.Entidad := _INDICA_; + bError := True; + end; + + if EsCadenaVacia(Receptor.Oficina) then + begin + Receptor.Oficina := _INDICA_; + bError := True; + end; + + if bError then + ShowMessage('Faltan datos al procesar el registro 01: ' + CRLF + CRLF + + 'NIF/CIF del presentador: ' + Presentador.NIFCIF + CRLF + + 'Sufijo del presentador: ' + Presentador.Sufijo + CRLF + + 'Nombre del presentador: ' + Presentador.Nombre + CRLF + + 'Identificador del fichero: ' + Fichero.Identificador + CRLF + + 'Cód. entidad del receptor: ' + Receptor.Entidad + CRLF + + 'Cód. oficina del receptor: ' + Receptor.Oficina + CRLF + ); + end; + + if sParte = '02' then // acreedor + begin + if EsCadenaVacia(Acreedor.NIFCIF) then + begin + Acreedor.NIFCIF := _INDICA_; + bError := True; + end + else + Acreedor.NIFCIF := UpperCase(Acreedor.NIFCIF); + + if EsCadenaVacia(Acreedor.Nombre) then + begin + Acreedor.Nombre := _INDICA_; + bError := True; + end + else + Acreedor.Nombre := UpperCase(ReplaceAccents(Acreedor.Nombre)); + + if EsCadenaVacia(Acreedor.Direccion1) then + begin + Acreedor.Direccion1 := _INDICA_; + bError := True; + end + else + Acreedor.Direccion1 := UpperCase(ReplaceAccents(Acreedor.Direccion1)); + + Acreedor.Direccion2 := UpperCase(ReplaceAccents(Acreedor.Direccion2)); + Acreedor.Direccion3 := UpperCase(ReplaceAccents(Acreedor.Direccion3)); + Acreedor.Pais := UpperCase(ReplaceAccents(Acreedor.Pais)); + + if EsCadenaVacia(Acreedor.CuentaIBAN) then + begin + Acreedor.CuentaIBAN := _INDICA_; + bError := True; + end; + + if EsCadenaVacia(Acreedor.Sufijo) then + begin + Acreedor.Sufijo := _INDICA_; + bError := True; + end; + + if bError then + ShowMessage('Faltan datos al procesar el registro 02: ' + CRLF + CRLF + + 'NIF/CIF del acreedor: ' + Acreedor.NIFCIF + CRLF + + 'Sufijo del acreedor: ' + Acreedor.Sufijo + CRLF + + 'Nombre del acreedor: ' + Acreedor.Nombre + CRLF + + 'Cuenta IBAN del acreedor: ' + Acreedor.CuentaIBAN + CRLF + + 'Dirección 1 del acreedor: ' + Acreedor.Direccion1 + CRLF + ); + end; + + + if sParte = '03' then // deudor + begin + // Quitar espacios y caracteres no estándar + Adeudo.Referencia := StringReplace(UpperCase(ReplaceAccents(Adeudo.Referencia)), ' ', '', [rfReplaceAll]); + + if EsCadenaVacia(Deudor.Nombre) then + begin + Deudor.Nombre := _INDICA_; + bError := True; + end + else + Deudor.Nombre := UpperCase(ReplaceAccents(Deudor.Nombre)); + + if EsCadenaVacia(Deudor.Direccion1) then + begin + Deudor.Direccion1 := _INDICA_; + bError := True; + end + else + Deudor.Direccion1 := UpperCase(ReplaceAccents(Deudor.Direccion1)); + + Deudor.Direccion2 := UpperCase(ReplaceAccents(Deudor.Direccion2)); + Deudor.Direccion3 := UpperCase(ReplaceAccents(Deudor.Direccion3)); + Deudor.Pais := UpperCase(ReplaceAccents(Deudor.Pais)); + + if EsCadenaVacia(Deudor.CuentaIBAN) then + begin + Deudor.CuentaIBAN := _INDICA_; + bError := True; + end; + + if EsCadenaVacia(Deudor.CodigoBIC) then + begin + Deudor.CodigoBIC := _INDICA_; + bError := True; + end; + + + if bError then + ShowMessage('Faltan datos al procesar el registro 03: ' + CRLF + CRLF + + 'Nombre del deudor: ' + Deudor.Nombre + CRLF + + 'Dirección 1 del deudor: ' + Deudor.Direccion1 + CRLF + + 'Cuenta IBAN del deudor: ' + Deudor.CuentaIBAN + CRLF + + 'Código BIC del deudor: ' + Deudor.CodigoBIC + ); + end; + +end; + + +procedure TCVBNorma19SEPA.Cerrar; +var + auxCadena : string; +begin + HayError := False; + sReg := ''; + + Inc(iTotalRegistros); + + + // Código de registro + sReg := '99'; + + // Total de importes general (17) + auxCadena := FormatFloat(_MSK_EU_, cSumaImportesTotalesAdeudos); + auxCadena := StringReplace(auxCadena, DecimalSeparator, '', [rfReplaceAll]); + sReg := sReg + Ajusta(auxCadena, 'I', 17, _CERO_); + + // Número de registros (8) + sReg := sReg + Ajusta(IntToStr(iNumeroRegistros), 'I', 8, _CERO_); + + // Total de registros (10) + sReg := sReg + Ajusta(IntToStr(iTotalRegistros), 'I', 10, _CERO_); + + // Libre (563) + sReg := sReg + Ajusta('', 'D', 563, _SPCE_); + + // Fin + sReg := sReg + CRLF; + + StrPCopy(@pReg, sReg); + BlockWrite(NFic, pReg, 1); + + if not (length(sReg) = _LL_) then + Error(_LL_); + + CloseFile(NFic); +end; + + +procedure TCVBNorma19SEPA.Error(iErr: integer); +begin + NrError := iErr; + HayError := True; + + if Assigned(FEnCasoError) then + FEnCasoError(Self) + else + CloseFile(NFic); + if NrError = _LL_ then + raise Exception.Create('Error en la longitud de la línea') + else + raise Exception.Create('Error en la generación del fichero'); +end; + + + + +end. diff --git a/Source/Modulos/Banca electronica/Utiles/CVBUtils.pas b/Source/Modulos/Banca electronica/Utiles/CVBUtils.pas index f2b87e8..23ca799 100644 --- a/Source/Modulos/Banca electronica/Utiles/CVBUtils.pas +++ b/Source/Modulos/Banca electronica/Utiles/CVBUtils.pas @@ -8,12 +8,44 @@ uses SysUtils; function Trim(const cString: string): string; function Replicate(c: char; nLen: integer): string; function Ajusta(sCampo, sOrientacion: string; iLongitud: integer; sRelleno: char): string; +function Modulo9710(const ANumber : string) : Integer; function AjustaCIF(sCampo: string): string; - +function ReplaceAccents(AText : String) : string; implementation +uses + Dialogs; + +const + SansAccents : array[#0..#255] of Char + = #0#1#2#3#4#5#6#7#8#9#10#11#12#13#14#15#16#17#18#19#20#21#22#23#24#25#26#27#28#29#30#31 + + ' !"#$%&''()*+,-./0123456789:;<=>?' + + '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'+ + '`abcdefghijklmnopqrstuvwxyz{|}~'#127 + + '€'#129'‚ƒ„…†‡ˆ‰S‹Œ'#141'Ž'#143#144'‘’“”•–—˜™s›œ'#157'zY' + + #160'¡¢£¤¥¦§¨©ª«¬*®¯°±²³´µ¶·¸¹º»¼½¾¿' + + 'AAAAAAÆCEEEEIIIIDNOOOOO×OUUUUYÞß' + + 'aaaaaaæceeeeiiiidnooooo÷ouuuuyþy'; + +function ReplaceAccents(AText : String) : string; +var + i : integer; + p : pchar; +begin + Result := AText; + if Result='' then + exit; + p := @Result[1]; + for i:=1 to Length(Result) do + begin + p^ := SansAccents[p^]; + inc(p); + end; +end; + + function AjustaCIF(sCampo: string): string; // Quita cualquier carácter no válido del cif,nif var @@ -55,4 +87,31 @@ begin Result := copy(Result, 1, iLongitud); end; + +function Modulo9710(const ANumber : string) : Integer; +const + m36:string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; +var + i, p : Integer; +begin + Result := 0; + + for i := 1 to Length(ANumber) do + begin + p := Pos(ANumber[i], m36) ; + if p = 0 then + raise Exception.CreateFmt('Modulo97(%s): invalid data', [ANumber]); + Dec(p); + if p > 9 then + begin + Result := Result * 10 + (p div 10); + p := p mod 10; + end; + Result := Result * 10 + p; + Result := Result mod 97; + end; + + Result := 98 - Result; +end; + end. diff --git a/Source/Modulos/Banca electronica/Views/BancaElectronica_view.dpk b/Source/Modulos/Banca electronica/Views/BancaElectronica_view.dpk index 779d51c..9a48a0c 100644 Binary files a/Source/Modulos/Banca electronica/Views/BancaElectronica_view.dpk and b/Source/Modulos/Banca electronica/Views/BancaElectronica_view.dpk differ diff --git a/Source/Modulos/Banca electronica/Views/BancaElectronica_view.dproj b/Source/Modulos/Banca electronica/Views/BancaElectronica_view.dproj index afdbce8..a24f16b 100644 --- a/Source/Modulos/Banca electronica/Views/BancaElectronica_view.dproj +++ b/Source/Modulos/Banca electronica/Views/BancaElectronica_view.dproj @@ -47,36 +47,39 @@ MainSource - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + +
fEditorExportacionNorma19
- -
fEditorExportacionNorma3
+ +
fEditorExportacionNorma19SEPA
+
+ +
fEditorExportacionNorma32
- - - -