diff --git a/Source/Informes/InfEtiquetasAlbaranCliente.fr3 b/Source/Informes/InfEtiquetasAlbaranCliente.fr3 new file mode 100644 index 0000000..07fd716 --- /dev/null +++ b/Source/Informes/InfEtiquetasAlbaranCliente.fr3 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas index 411bd0f..b319fc8 100644 --- a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas +++ b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas @@ -49,8 +49,8 @@ type procedure Preview(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false); procedure Print(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false); - procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente); - procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente); + procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false); + procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false); procedure RecalcularImportes(AAlbaran: IBizAlbaranCliente); function EsModificable(AAlbaran: IBizAlbaranCliente): Boolean; @@ -149,8 +149,8 @@ type procedure Preview(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false); procedure Print(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false); - procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente); - procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente); + procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false); + procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false); function DarListaAnosAlbaranes: TStringList; procedure FiltrarAno(AAlbaran: IBizAlbaranCliente; ADynWhereDataTable: WideString; const Ano: String); @@ -857,27 +857,71 @@ begin Result := not (AAlbaran.ID_FACTURA > 0); end; -procedure TAlbaranesClienteController.EtiquetasPreview(AAlbaran: IBizAlbaranCliente); +procedure TAlbaranesClienteController.EtiquetasPreview(AAlbaran: IBizAlbaranCliente; AllItems: Boolean = false); var AReportController : IAlbaranesClienteReportController; + ID_Albaranes: TIntegerList; + begin AReportController := TAlbaranesClienteReportController.Create; + ID_Albaranes := TIntegerList.Create; + try - AReportController.EtiquetasPreview(AAlbaran.ID); + //Si deseamos previsualizar todos los items del objeto albaran + if AllItems then + begin + with AAlbaran.DataTable do + begin + First; + while not EOF do + begin + ID_Albaranes.Add(AAlbaran.ID); + Next; + end; + end; + end + //Solo previsualizamos el item seleccionado + else + ID_Albaranes.Add(AAlbaran.ID); + + AReportController.EtiquetasPreview(ID_Albaranes); finally AReportController := NIL; + FreeANDNIL(ID_Albaranes); end; end; -procedure TAlbaranesClienteController.EtiquetasPrint(AAlbaran: IBizAlbaranCliente); +procedure TAlbaranesClienteController.EtiquetasPrint(AAlbaran: IBizAlbaranCliente; AllItems: Boolean = false); var AReportController : IAlbaranesClienteReportController; + ID_Albaranes: TIntegerList; + begin AReportController := TAlbaranesClienteReportController.Create; + ID_Albaranes := TIntegerList.Create; + try - AReportController.EtiquetasPrint(AAlbaran.ID); + //Si deseamos previsualizar todos los items del objeto albaran + if AllItems then + begin + with AAlbaran.DataTable do + begin + First; + while not EOF do + begin + ID_Albaranes.Add(AAlbaran.ID); + Next; + end; + end; + end + //Solo previsualizamos el item seleccionado + else + ID_Albaranes.Add(AAlbaran.ID); + + AReportController.EtiquetasPrint(ID_Albaranes); finally AReportController := NIL; + FreeANDNIL(ID_Albaranes); end; end; diff --git a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteReportController.pas b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteReportController.pas index ddb349b..190d1fe 100644 --- a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteReportController.pas +++ b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteReportController.pas @@ -12,10 +12,10 @@ type ['{4BCC7A93-3322-494C-A3FA-118F4B62CB15}'] procedure Preview(const AListaID : TIntegerList); procedure Print(const AListaID : TIntegerList); - procedure EtiquetasPreview(const AID : integer); - procedure EtiquetasPrint(const AID : integer); + procedure EtiquetasPreview(const AListaID: TIntegerList); + procedure EtiquetasPrint(const AListaID: TIntegerList); function ExportToWord(const AID: Integer; const AFileName : String = ''): Boolean; - function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean; + function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean; end; TAlbaranesClienteReportController = class(TControllerBase, IAlbaranesClienteReportController) @@ -30,9 +30,9 @@ type procedure Preview(const AListaID : TIntegerList); procedure Print(const AListaID : TIntegerList); function ExportToWord(const AID: Integer; const AFileName : String = ''): Boolean; - function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean; - procedure EtiquetasPreview(const AID : integer); - procedure EtiquetasPrint(const AID : integer); + function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean; + procedure EtiquetasPreview(const AListaID: TIntegerList); + procedure EtiquetasPrint(const AListaID: TIntegerList); end; @@ -64,7 +64,7 @@ begin inherited; end; -procedure TAlbaranesClienteReportController.EtiquetasPreview(const AID: integer); +procedure TAlbaranesClienteReportController.EtiquetasPreview(const AListaID: TIntegerList); var AStream: Binary; AEditor : IEditorAlbaranesClientePreview; @@ -73,7 +73,7 @@ begin ShowHourglassCursor; try - AStream := FDataModule.GetEtiquetas(AID); + AStream := FDataModule.GetEtiquetas(AListaID); try CreateEditor('EditorAlbaranesClientePreview', IEditorAlbaranesClientePreview, AEditor); if Assigned(AEditor) then @@ -92,7 +92,7 @@ begin end; end; -procedure TAlbaranesClienteReportController.EtiquetasPrint(const AID: integer); +procedure TAlbaranesClienteReportController.EtiquetasPrint(const AListaID: TIntegerList); var AStream: Binary; AEditor : IEditorAlbaranesClientePreview; @@ -101,7 +101,7 @@ begin ShowHourglassCursor; try - AStream := FDataModule.GetEtiquetas(AID); + AStream := FDataModule.GetEtiquetas(AListaID); try CreateEditor('EditorAlbaranesClientePreview', IEditorAlbaranesClientePreview, AEditor); if Assigned(AEditor) then diff --git a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas index 6f9ad0f..313ebf8 100644 --- a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas +++ b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas @@ -41,7 +41,7 @@ type // Report function GetRptAlbaranes(const ListaID: TIntegerList): Binary; function GetRptWordAlbaran(const AID: Integer): Binary; - function GetEtiquetas(const AID: Integer): Binary; + function GetEtiquetas(const ListaID: TIntegerList): Binary; function GetRptPDFAlbaran(const AID: Integer): Binary; function GetAnosItems : TStringList; @@ -165,9 +165,16 @@ begin end; end; -function TDataModuleAlbaranesCliente.GetEtiquetas(const AID: Integer): Binary; +function TDataModuleAlbaranesCliente.GetEtiquetas(const ListaID: TIntegerList): Binary; +var + AParam : TIntegerArray; begin - Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEtiquetas(AID) + AParam := ListaID.ToIntegerArray; + try + Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEtiquetas(AParam) + finally +// FreeAndNil(AParam); + end; end; function TDataModuleAlbaranesCliente.GetItem(const ID: Integer): IBizAlbaranCliente; diff --git a/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesClienteReport.pas b/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesClienteReport.pas index d9464ef..64178cf 100644 --- a/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesClienteReport.pas +++ b/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesClienteReport.pas @@ -11,7 +11,7 @@ type function GetRptAlbaranes(const AListaID: TIntegerList): Binary; function GetRptWordAlbaran(const AID: Integer): Binary; function GetRptPDFAlbaran(const AID: Integer): Binary; - function GetEtiquetas(const AID: Integer): Binary; + function GetEtiquetas(const ListaID: TIntegerList): Binary; end; implementation diff --git a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas index e8c0451..2c43439 100644 --- a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas +++ b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas @@ -69,7 +69,7 @@ type procedure _GenerarAlbaran(const AID: Integer); public function GenerarAlbaran(const AListaID : TIntegerArray): Binary; - function GenerarEtiquetas(const AID : Integer): Binary; + function GenerarEtiquetas(const AListaID : TIntegerArray): Binary; function GenerarAlbaranEnPDF(const ListaID : TIntegerArray): Binary; end; @@ -170,41 +170,36 @@ begin end; end; -function TRptAlbaranesCliente.GenerarEtiquetas(const AID: Integer): Binary; -{var - dsMaster: IDADataset; - dsDetail: IDADataset; - AStream: TMemoryStream;} +function TRptAlbaranesCliente.GenerarEtiquetas(const AListaID : TIntegerArray): Binary; +var + i: Integer; + AInforme: Variant; + begin - Result := NIL; -{ - AStream := TMemoryStream.Create; Result := Binary.Create; - FConnection.BeginTransaction; try - dsMaster := schReport.NewDataset(FConnection, ds_InformeCabecera, ['ID'], [AID]); - dsDetail := schReport.NewDataset(FConnection, ds_InformeDetallesEtiquetas, ['ID_ALBARAN'], [AID], False); + //Vamos generando todos y cada uno de los albaranes recibidos + for i := 0 to AListaID.Count - 1 do + begin + FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + try + tbl_Cabecera.Active := False; + tbl_Cabecera.ParamByName('ID').AsInteger := AListaID.Items[i]; + tbl_Cabecera.Active := True; - AStream.Clear; - DABINAdapter.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1); - DABINAdapter.ReadDataset(AStream, tbl_Cabecera, TRUE, '', TRUE, TRUE); + AInforme := DarRutaFichero(DarRutaInformes, rptInfEtiquetas); + if VarIsNull(AInforme) then + raise Exception.Create (('Error Servidor: GenerarEtiquetas, no encuentra informe ' + rptInfEtiquetas)); - AStream.Clear; - DABINAdapter.WriteDataset(AStream, dsDetail, [woRows, woSchema], -1); - DABINAdapter.ReadDataset(AStream, tbl_Detalles, TRUE, '', TRUE, TRUE); - - frxReport.LoadFromFile(DarRutaInformes + rptInfEtiquetas, True); - if withRefCliente then - frxReport.Variables.Variables['withRefCliente'] := 1 - else - frxReport.Variables.Variables['withRefCliente'] := 0; - frxReport.PrepareReport(False); + frxReport.LoadFromFile(AInforme, True); + frxReport.PrepareReport(False); + finally + FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO" + end; + end; frxReport.PreviewPages.SaveToStream(Result); finally - AStream.Free; - FConnection.RollbackTransaction; end; -} end; end. diff --git a/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.pas b/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.pas index 6105068..a34bd3f 100644 --- a/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.pas +++ b/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.pas @@ -34,7 +34,7 @@ type protected { IsrvAlbaranesCliente methods } function GenerarInforme(const ListaID: TIntegerArray): Binary; - function GenerarInformeEtiquetas(const ID: Integer): Binary; + function GenerarInformeEtiquetas(const ListaID : TIntegerArray): Binary; function GenerarInformeEnWord(const ID: Integer): Binary; function GenerarInformeEnPDF(const ListaID: TIntegerArray): Binary; end; @@ -92,15 +92,13 @@ begin end; end; -function TsrvAlbaranesCliente.GenerarInformeEtiquetas(const ID: Integer): Binary; +function TsrvAlbaranesCliente.GenerarInformeEtiquetas(const ListaID : TIntegerArray): Binary; var AReportGenerator : TRptAlbaranesCliente; begin - Result := NIL; - AReportGenerator := TRptAlbaranesCliente.Create(nil); try - Result := AReportGenerator.GenerarEtiquetas(ID); + Result := AReportGenerator.GenerarEtiquetas(ListaID); finally FreeAndNIL(AReportGenerator); end; diff --git a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas index 853711c..e2d6c9f 100644 --- a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas +++ b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas @@ -425,6 +425,18 @@ begin if Respuesta <> IDCANCEL then begin case JsImprimirDialog.CustomButtonResult of + 300 : begin // Lista de elementos visibles + if AllItems then + begin + SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Albaranes as ISeleccionable).SelectedRecords); + AAlbaranes := (Controller as IAlbaranesClienteController).ExtraerSeleccionados(Albaranes) as IBizAlbaranCliente; + end + else + AAlbaranes := Albaranes; + + if Assigned(AAlbaranes) then + FController.EtiquetasPrint(AAlbaranes, AllItems); + end; 200 : begin // Lista de elementos visibles inherited; end; @@ -522,9 +534,8 @@ begin AAlbaranes := Albaranes; if Assigned(AAlbaranes) then - FController.Preview(AAlbaranes, AllItems); + FController.EtiquetasPreview(AAlbaranes, AllItems); end; - 200 : begin // Lista de elementos visibles inherited; end; diff --git a/Source/Servicios/FactuGES.RODL b/Source/Servicios/FactuGES.RODL index 5485d55..40e0237 100644 --- a/Source/Servicios/FactuGES.RODL +++ b/Source/Servicios/FactuGES.RODL @@ -370,7 +370,7 @@ - + diff --git a/Source/Servicios/FactuGES_Intf.pas b/Source/Servicios/FactuGES_Intf.pas index 9666cd1..2660747 100644 --- a/Source/Servicios/FactuGES_Intf.pas +++ b/Source/Servicios/FactuGES_Intf.pas @@ -587,7 +587,7 @@ type IsrvAlbaranesCliente = interface(IDataAbstractService) ['{6E910718-9AB0-47BB-9875-B0DE66A68D7A}'] function GenerarInforme(const ListaID: TIntegerArray): Binary; - function GenerarInformeEtiquetas(const ID: Integer): Binary; + function GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary; function GenerarInformeEnWord(const ID: Integer): Binary; function GenerarInformeEnPDF(const ListaID: TIntegerArray): Binary; end; @@ -603,7 +603,7 @@ type function __GetInterfaceName:string; override; function GenerarInforme(const ListaID: TIntegerArray): Binary; - function GenerarInformeEtiquetas(const ID: Integer): Binary; + function GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary; function GenerarInformeEnWord(const ID: Integer): Binary; function GenerarInformeEnPDF(const ListaID: TIntegerArray): Binary; end; @@ -1898,15 +1898,16 @@ begin end end; -function TsrvAlbaranesCliente_Proxy.GenerarInformeEtiquetas(const ID: Integer): Binary; +function TsrvAlbaranesCliente_Proxy.GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary; begin try result := nil; __Message.InitializeRequestMessage(__TransportChannel, 'FactuGES', __InterfaceName, 'GenerarInformeEtiquetas'); - __Message.Write('ID', TypeInfo(Integer), ID, []); + __Message.Write('ListaID', TypeInfo(FactuGES_Intf.TIntegerArray), ListaID, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); + ListaID.Free; __Message.Read('Result', TypeInfo(Binary), result, []); finally diff --git a/Source/Servicios/FactuGES_Invk.pas b/Source/Servicios/FactuGES_Invk.pas index 60633af..dd6ab10 100644 --- a/Source/Servicios/FactuGES_Invk.pas +++ b/Source/Servicios/FactuGES_Invk.pas @@ -1101,17 +1101,18 @@ begin end; procedure TsrvAlbaranesCliente_Invoker.Invoke_GenerarInformeEtiquetas(const __Instance:IInterface; const __Message:IROMessage; const __Transport:IROTransport; out __oResponseOptions:TROResponseOptions); -{ function GenerarInformeEtiquetas(const ID: Integer): Binary; } +{ function GenerarInformeEtiquetas(const ListaID: TIntegerArray): Binary; } var - ID: Integer; + ListaID: FactuGES_Intf.TIntegerArray; lResult: Binary; __lObjectDisposer: TROObjectDisposer; begin + ListaID := nil; lResult := nil; try - __Message.Read('ID', TypeInfo(Integer), ID, []); + __Message.Read('ListaID', TypeInfo(FactuGES_Intf.TIntegerArray), ListaID, []); - lResult := (__Instance as IsrvAlbaranesCliente).GenerarInformeEtiquetas(ID); + lResult := (__Instance as IsrvAlbaranesCliente).GenerarInformeEtiquetas(ListaID); __Message.InitializeResponseMessage(__Transport, 'FactuGES', 'srvAlbaranesCliente', 'GenerarInformeEtiquetasResponse'); __Message.Write('Result', TypeInfo(Binary), lResult, []); @@ -1121,6 +1122,7 @@ begin finally __lObjectDisposer := TROObjectDisposer.Create(__Instance); try + __lObjectDisposer.Add(ListaID); __lObjectDisposer.Add(lResult); finally __lObjectDisposer.Free(); diff --git a/Source/Servicios/RODLFILE.res b/Source/Servicios/RODLFILE.res index b743f7b..9127952 100644 Binary files a/Source/Servicios/RODLFILE.res and b/Source/Servicios/RODLFILE.res differ