{ =============================================================================== Copyright (©) 2007. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: Versión actual: 1.0.0 Fecha versión actual: =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit uBancaElectronicaController; interface uses Classes, SysUtils, uDADataTable; type IBancaElectronicaController = interface ['{9E37DF46-D02C-47C4-BCBE-414FB97A7751}'] procedure GenerarFicheroNorma19 (const IDRemesa : Integer); procedure GenerarFicheroNorma32 (const IDRemesa : Integer); end; TBancaElectronicaController = class(TInterfacedObject, IBancaElectronicaController) private function VerEditorNorma19(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; public procedure GenerarFicheroNorma19 (const IDRemesa : Integer); procedure GenerarFicheroNorma32 (const IDRemesa : Integer); end; implementation uses Forms, cxControls, Controls, Windows, CVBNorma1958CSB, CVBNorma32CSB, uEditorRegistryUtils, uBizEmpresas, uEmpresasController, uBizContactos, uClientesController, uBizRemesasCliente, uRemesasClienteController, schRemesasClienteClient_Intf, schRecibosClienteClient_Intf, Dialogs, uIEditorExportacionNorma19, uIEditorExportacionNorma32, uBizRecibosCliente, schContactosClient_Intf, schEmpresasClient_Intf; { TBancaElectronicaController } procedure TBancaElectronicaController.GenerarFicheroNorma19( const IDRemesa: Integer); var ARemesasController : IRemesasClienteController; AEmpresasController : IEmpresasController; AClientesController : IClientesController; ARemesa : IBizRemesaCliente; AEmpresa : IBizEmpresa; ACliente : IBizCliente; ANorma19 : TCVBNorma1958CSB; I: integer; AEntidad : String; AOficina : String; begin ARemesasController := TRemesasClienteController.Create; AEmpresasController := TEmpresasController.Create; AClientesController := TClientesController.Create; ANorma19 := TCVBNorma1958CSB.Create(NIL); ShowHourglassCursor; 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.FNomFic := 'REM' + ARemesa.REFERENCIA + '.C19'; ANorma19.FecAbono := ARemesa.FECHA_REMESA; // 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; if not VerEditorNorma19(AEntidad, AOficina, ANorma19.FecAbono, ANorma19.FNomFic) then Exit; ANorma19.EntRecepPres := AEntidad; ANorma19.OfiRecepPres := AOficina; with ANorma19 do begin _NORMA_ := 19; //ANorma19.Procedimiento := prPrimero; // <= ???????????????????????????????????? Euros := True; Depura := True; Abrir; FecCargo := Now; // <= Fecha de generación del fichero //FecVcto := ARemesa.FECHA_REMESA; // <= sólo para norma 58 // PRESENTADOR Presentador := AEmpresa.NIF_CIF; SufijoPres := ARemesa.SUFIJO_N19; NomCliPres := AEmpresa.NOMBRE; CompCabecera; // el que cobra Ordenante := AEmpresa.NIF_CIF; SufijoOrd:= ARemesa.SUFIJO_N19; NomCliOrd:= AEmpresa.NOMBRE; EntOrde:= ARemesa.ENTIDAD; OfiOrde:= ARemesa.SUCURSAL; DcOrde:= ARemesa.DC; CcOrde:= ARemesa.CUENTA; LocalidadOrd:= ''; CodLocalOrd:= ''; //FecOrigFormCred:= <= Sólo para norma 58 CompOrdenante; 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.DataTable.Active := True; // el que paga Referencia := ACliente.REFERENCIA; NomTitDom := ARemesa.Recibos.NOMBRE_CLIENTE; EntTitDom := ARemesa.Recibos.ENTIDAD_CLIENTE; OfiTitDom := ARemesa.Recibos.SUCURSAL_CLIENTE; DcTitDom := ARemesa.Recibos.DC_CLIENTE; CcTitDom := ARemesa.Recibos.CUENTA_CLIENTE; NomTitCta := ARemesa.Recibos.NOMBRE_CLIENTE; DomTitCta := ''; PlzTitCta := ''; CPtTitCta := ''; CampConc1 := 'Recibo ' + ARemesa.Recibos.REFERENCIA; fImporteEu := ARemesa.Recibos.IMPORTE_TOTAL; CompRegistro; ARemesa.Recibos.DataTable.Next; end; FinOrdenan; Cerrar; end; finally HideHourglassCursor; ARemesasController := NIL; AEmpresasController := NIL; AClientesController := NIL; AEmpresa := NIL; FreeAndNil(ANorma19); end; end; procedure TBancaElectronicaController.GenerarFicheroNorma32( const IDRemesa: Integer); var ARemesasController : IRemesasClienteController; AEmpresasController : IEmpresasController; AClientesController : IClientesController; ARemesa : IBizRemesaCliente; AEmpresa : IBizEmpresa; ACliente : IBizCliente; ANorma32 : TCVBNorma32CSB; I: integer; AEntidad : String; AOficina : String; ACodINE : String; begin ARemesasController := TRemesasClienteController.Create; AEmpresasController := TEmpresasController.Create; AClientesController := TClientesController.Create; ANorma32 := TCVBNorma32CSB.Create(NIL); ShowHourglassCursor; Application.ProcessMessages; 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]); ANorma32.FNomFic := 'REM' + ARemesa.REFERENCIA + '.C32'; ANorma32.FechaFichero := 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; if not VerEditorNorma32(ANorma32.IdCedente, ACodINE, AEntidad, AOficina, ANorma32.FNomFic) then Exit; with ANorma32 do begin _NORMA_ := 32; Euros := True; Depura := True; Abrir; // Cabecera del fichero FechaFichero := NOW; EntReceptora := AEntidad; SucReceptora := AOficina; CompCabeceraFichero; // Cabecera de la remesa NumRemesa := '0001'; //<------------------------------------------------- AboEnt := ARemesa.ENTIDAD; AboOfi := ARemesa.SUCURSAL; AboDC := ARemesa.DC; AboCC := ARemesa.CUENTA; AdeEnt := ARemesa.ENTIDAD; AdeOfi := ARemesa.SUCURSAL; AdeDC := ARemesa.DC; AdeCC := ARemesa.CUENTA; ImpEnt := ARemesa.ENTIDAD; ImpSuc := ARemesa.SUCURSAL; ImpDC := ARemesa.DC; ImpCC := ARemesa.CUENTA; CompCabeceraRemesa; ARemesa.Recibos.First; for i := 0 to ARemesa.Recibos.RecordCount - 1 do begin RegNumRecibo := ARemesa.Recibos.REFERENCIA; RegCodigoINE := ACodINE; RegPlazaLibr := AEmpresa.POBLACION; RegImpEfecto := ARemesa.Recibos.IMPORTE_TOTAL; RegVtoEfecto := ARemesa.Recibos.FECHA_VENCIMIENTO; // (II) RegCodEnt := ARemesa.Recibos.ENTIDAD_CLIENTE; RegCodOfi := ARemesa.Recibos.SUCURSAL_CLIENTE; RegDC := ARemesa.Recibos.DC_CLIENTE; RegCC := ARemesa.Recibos.CUENTA_CLIENTE; RegLibrador := AEmpresa.NOMBRE; RegLibrado := ARemesa.Recibos.NOMBRE_CLIENTE; RegInfoAdic := ''; // (III) ACliente := (AClientesController.Buscar(ARemesa.Recibos.ID_CLIENTE) as IBizCliente); try ACliente.DataTable.Active := True; RegDomicilio := ACliente.CALLE; RegCodPostal := ACliente.CODIGO_POSTAL; RegPoblacion := ACliente.POBLACION; // RegNIF := ARemesa.Recibos.NIF_CIF_CLIENTE; finally ACliente := NIL; end; CompRegistro; ARemesa.Recibos.Next; end; CompFinRemesa; Cerrar; end; finally HideHourglassCursor; ARemesasController := NIL; AEmpresasController := NIL; AClientesController := NIL; AEmpresa := NIL; FreeAndNil(ANorma32); end; end; function TBancaElectronicaController.VerEditorNorma19 ( var Entidad : String; var Oficina : String; var AFechaCargo : TDateTime; var AFileName : String): Boolean; var AEditor : IEditorExportacionNorma19; begin Result := False; AEditor := NIL; ShowHourglassCursor; try CreateEditor('EditorExportacionNorma19', IEditorExportacionNorma19, 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; function TBancaElectronicaController.VerEditorNorma32(var Identificador, ACodigoINE: String; var Entidad, Oficina: String; var AFileName: String): Boolean; var AEditor : IEditorExportacionNorma32; begin Result := False; AEditor := NIL; ShowHourglassCursor; try CreateEditor('EditorExportacionNorma32', IEditorExportacionNorma32, AEditor); with AEditor do begin CodigoIdentif := Identificador; CodigoINE := ACodigoINE; CodigoEntidad := Entidad; CodigoAgencia := Oficina; Fichero := AFileName; end; finally HideHourglassCursor; end; if Assigned(AEditor) then try if (AEditor.ShowModal = mrOk) then begin Identificador := AEditor.CodigoIdentif; ACodigoINE := AEditor.CodigoINE; Entidad := AEditor.CodigoEntidad; Oficina := AEditor.CodigoAgencia; AFileName := AEditor.Fichero; Result := True; end; AEditor.Release; finally AEditor := NIL; end; end; end.