unit uDataModulePagos; interface uses {vcl:} SysUtils, Classes, DB, DBClient, {RemObjects:} uDAClientDataModule, uDADataTable, uDABINAdapter, uROServiceComponent, uRORemoteService, uROClient, uROBinMessage, uROWinInetHttpChannel, uDAScriptingProvider, uDACDSDataTable, uBizPagos, uBizContacto; type TdmPagos = class(TDAClientDataModule) DABINAdapter: TDABINAdapter; RORemoteService: TRORemoteService; tbl_Pagos: TDACDSDataTable; ds_Pagos: TDADataSource; tbl_ListaAnosPagos: TDACDSDataTable; ds_ListaAnosPagos: TDADataSource; procedure DAClientDataModuleCreate(Sender: TObject); private function GetPagos(CodigoCategoria : Integer): IBizPagos; public function GetNextAutoinc : integer; function GetItems: IBizPagos; function GetPagosProveedor : IBizPagosProveedor; function GetPagosCliente : IBizPagosCliente; function GetPagoProveedor(Codigo: Integer) : IBizPagosProveedor; function GetPagoCliente(Codigo: Integer) : IBizPagosCliente; procedure Preview(Const Codigo: Integer); procedure Print(Const Codigo: Integer); function PuedoEliminarAlmacen(Codigo : Integer) : Boolean; function AnadirPagoCliente(Cliente: IBizCliente; CodigoPresupuesto: Integer; Descripcion: Variant; Importe: Currency; var FechaPago: TDateTime): Boolean; function DarListaAnosPagos: TStringList; procedure FiltrarAno(APagos: IBizPagos; AWhereDataTable: String; const Ano: String); end; var dmPagos: TdmPagos; implementation {$R *.DFM} uses Controls, cxControls, Forms, uDAInterfaces, DataAbstract_Intf, FactuGES_Intf, uDataTableUtils, uROTypes, uEditorPreview, Dialogs, uDataModuleBase, schPagosClient_Intf, uDataModuleMontajes, uBizMontajes; const MAX_RECORDS = 100; function TdmPagos.AnadirPagoCliente(Cliente: IBizCliente; CodigoPresupuesto: Integer; Descripcion: Variant; Importe: Currency; var FechaPago: TDateTime): Boolean; var APagoCliente: IBizPagosCliente; ReferenciaMontaje: String; begin Result := False; APagoCliente := GetPagoCliente(-1); APagoCliente.DataTable.Active := True; APagoCliente.Insert; APagoCliente.Contacto := Cliente; APagoCliente.DESCRIPCION := 'Cobro albarán ' + Descripcion; APagoCliente.IMPORTE := Importe; if (APagoCliente.Show = mrOk) then begin FechaPago := APagoCliente.FECHAPAGO; ReferenciaMontaje := dmMontajes.CambiarSituacion(CodigoPresupuesto, sitPagado); Showmessage('El montaje ' + ReferenciaMontaje + ', ha cambiado su estado a pagado y terminado'); Result := True; end; APagoCliente := Nil; end; procedure TdmPagos.DAClientDataModuleCreate(Sender: TObject); begin RORemoteService.Channel := dmBase.Channel; RORemoteService.Message := dmBase.Message; end; function TdmPagos.DarListaAnosPagos: TStringList; var AListaAnos: TStringList; begin AListaAnos := TStringList.Create; ShowHourglassCursor; try with tbl_ListaAnosPagos do begin Open; First; while not eof do begin AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString])); Next; end; Close; end; Result := AListaAnos; finally HideHourglassCursor; end; end; procedure TdmPagos.FiltrarAno(APagos: IBizPagos; AWhereDataTable: String; const Ano: String); var FechaIni: String; FechaFin: String; begin APagos.DataTable.Where.Clear; APagos.DataTable.Where.AddText(AWhereDataTable); if (Ano <> 'Todos') then begin // Filtrar los presupuestos actuales por años FechaIni := '01.01.' + Ano; FechaFin := '31.12.' + Ano; with APagos.DataTable.Where do begin if NotEmpty then AddOperator(opAND); AddCondition(fld_PagosFECHAPAGO, cMajorOrEqual, FechaIni); AddOperator(opAND); AddCondition(fld_PagosFECHAPAGO, cLessOrEqual, FechaFin); end; end; end; function TdmPagos.GetItems: IBizPagos; var dtPagos: TDACDSDataTable; ACursor: TCursor; begin ACursor := Screen.Cursor; Screen.Cursor := crHourGlass; try dtPagos := TDACDSDataTable.Create(NIL); CloneDataTable(tbl_Pagos, dtPagos); dtPagos.BusinessRulesID := 'BizPagos'; Result := (dtPagos as IBizPagos); finally Screen.Cursor := ACursor; end; end; function TdmPagos.GetNextAutoinc: integer; begin Result := (RORemoteService as IsrvPagos).GetNextAutoinc; end; function TdmPagos.GetPagoCliente(Codigo: Integer): IBizPagosCliente; var APagoCliente: IBizPagosCliente; begin APagoCliente := GetPagosCliente; with APagoCliente.DataTable.Where do begin if not Empty then AddOperator(opAND); OpenBraket; AddText('PAGOS.' + fld_PagosCODIGO + ' = ' + IntToStr(Codigo), False); CloseBraket; end; Result := APagoCliente; end; function TdmPagos.GetPagoProveedor(Codigo: Integer): IBizPagosProveedor; var APagoProveedor: IBizPagosProveedor; begin APagoProveedor := GetPagosProveedor; with APagoProveedor.DataTable.Where do begin if not Empty then AddOperator(opAND); OpenBraket; AddText('PAGOS.' + fld_PagosCODIGO + ' = ' + IntToStr(Codigo), False); CloseBraket; end; Result := APagoProveedor; end; function TdmPagos.GetPagos(CodigoCategoria: Integer): IBizPagos; var dtPagos: TDACDSDataTable; ACursor: TCursor; begin ACursor := Screen.Cursor; Screen.Cursor := crHourGlass; try dtPagos := TDACDSDataTable.Create(NIL); CloneDataTable(tbl_Pagos, dtPagos); with dtPagos do begin case CodigoCategoria of CLIENTE : BusinessRulesID := BIZ_PAGOSCLIENTE; PROVEEDOR : BusinessRulesID := BIZ_PAGOSPROVEEDOR; end; Where.Clear; Where.AddText('CC.' + fld_PagosCODIGOCATEGORIA + '=' + IntToStr(CODIGOCATEGORIA)); end; Result := (dtPagos as IBizPagos); finally Screen.Cursor := ACursor; end; end; function TdmPagos.GetPagosCliente: IBizPagosCliente; var APagosCliente: IBizPagosCliente; begin APagosCliente := (GetPagos(CLIENTE) as IBizPagosCliente); Result := APagosCliente; end; function TdmPagos.GetPagosProveedor: IBizPagosProveedor; var APagosProveedor: IBizPagosProveedor; begin APagosProveedor := (GetPagos(PROVEEDOR) as IBizPagosProveedor); Result := APagosProveedor; end; procedure TdmPagos.Preview(Const Codigo: Integer); var AStream: TMemoryStream; AEditorPreview : TfEditorPreview; begin AStream := Binary.Create; AEditorPreview := TfEditorPreview.Create(Application); try AStream := (RemoteService as ISrvPagos).GenerateReport(Codigo); AEditorPreview.Report.PreviewPages.LoadFromStream(AStream); AEditorPreview.ShowModal; finally AEditorPreview.Release; AStream.Free; end; end; {function TdmAlmacenes.GetCliente(Codigo: Integer): IBizCliente; var // dtContactos: TDACDSDataTable; // dtCategorias: TDACDSDataTable; // ACursor: TCursor; begin { ACursor := Screen.Cursor; Screen.Cursor := crHourGlass; try dtContactos := TDACDSDataTable.Create(NIL); CloneDataTable(tbl_Contactos, dtContactos); dtContactos.BusinessRulesID := 'BizCliente'; dtCategorias := TDACDSDataTable.Create(NIL); CloneDataTable(tbl_CategoriasContacto, dtCategorias); dtCategorias.BusinessRulesID := 'BizCategoria'; (dtContactos as IBizContacto).Categorias := (dtCategorias as IBizCategoriasContacto); Result := (dtContactos as IBizCliente); GetCliente(Result, Codigo); finally Screen.Cursor := ACursor; end; end; } {function TdmPagos.GetItem(Codigo: Integer): IBizAlmacen; var AAlmacen: IBizAlmacen; begin AAlmacen := GetItems; with AAlmacen.DataTable do begin if Active then Active := False; Where.Clear; Where.AddCondition(fld_ALMACENESCODIGO, cEqual, Codigo); Active := True; end; Result := AAlmacen; end; } procedure TdmPagos.Print(Const Codigo: Integer); var AStream: TMemoryStream; AEditorPreview : TfEditorPreview; begin AStream := Binary.Create; AEditorPreview := TfEditorPreview.Create(Application); try AStream := (RemoteService as ISrvPagos).GenerateReport(Codigo); AEditorPreview.Report.PreviewPages.LoadFromStream(AStream); AEditorPreview.Print; finally AEditorPreview.Release; AStream.Free; end; end; function TdmPagos.PuedoEliminarAlmacen(Codigo: Integer): Boolean; begin // Result := (RORemoteService as IsrvAlmacenes).PuedoEliminarAlmacen(Codigo); end; initialization dmPagos := TdmPagos.Create(nil); finalization FreeAndNil(dmPagos); end.