diff --git a/Source/Base/GUIBase/GUIBase.res b/Source/Base/GUIBase/GUIBase.res
index 1641339f..8b251f31 100644
Binary files a/Source/Base/GUIBase/GUIBase.res and b/Source/Base/GUIBase/GUIBase.res differ
diff --git a/Source/Cliente/FactuGES.bdsproj b/Source/Cliente/FactuGES.bdsproj
index 49e5c501..90a4168d 100644
--- a/Source/Cliente/FactuGES.bdsproj
+++ b/Source/Cliente/FactuGES.bdsproj
@@ -148,7 +148,7 @@
True
False
3
- 1
+ 2
0
0
False
@@ -162,7 +162,7 @@
Rodax Software S.L.
- 3.1.0.0
+ 3.2.0.0
FactuGES
diff --git a/Source/Cliente/FactuGES.rc b/Source/Cliente/FactuGES.rc
index 86c194e1..c51188f0 100644
--- a/Source/Cliente/FactuGES.rc
+++ b/Source/Cliente/FactuGES.rc
@@ -1,7 +1,7 @@
MAINICON ICON "c:\Codigo Luis Leon\Source\Iconos\Factuges.ico"
1 VERSIONINFO
-FILEVERSION 3,0,9,0
-PRODUCTVERSION 3,0,9,0
+FILEVERSION 3,2,0,0
+PRODUCTVERSION 3,2,0,0
FILEFLAGSMASK 0x3FL
FILEFLAGS 0x00L
FILEOS 0x40004L
@@ -13,9 +13,9 @@ BEGIN
BLOCK "0C0A04E4"
BEGIN
VALUE "CompanyName", "Rodax Software S.L.\0"
- VALUE "FileVersion", "3.0.9.0\0"
+ VALUE "FileVersion", "3.2.0.0\0"
VALUE "InternalName", "FactuGES\0"
- VALUE "ProductVersion", "3.0.9.0\0"
+ VALUE "ProductVersion", "3.1.0.0\0"
END
END
BLOCK "VarFileInfo"
diff --git a/Source/Cliente/FactuGES.res b/Source/Cliente/FactuGES.res
index 2fb237ec..2f549a7f 100644
Binary files a/Source/Cliente/FactuGES.res and b/Source/Cliente/FactuGES.res differ
diff --git a/Source/Modulos/Albaranes de cliente/Controller/AlbaranesCliente_controller.dpk b/Source/Modulos/Albaranes de cliente/Controller/AlbaranesCliente_controller.dpk
index 4a1f4c0d..07ce7544 100644
--- a/Source/Modulos/Albaranes de cliente/Controller/AlbaranesCliente_controller.dpk
+++ b/Source/Modulos/Albaranes de cliente/Controller/AlbaranesCliente_controller.dpk
@@ -54,6 +54,7 @@ contains
uAlbaranesClienteReportController in 'uAlbaranesClienteReportController.pas',
uIEditorAlbaranesClientePreview in 'View\uIEditorAlbaranesClientePreview.pas',
uIEditorAlbaranesDevCliente in 'View\uIEditorAlbaranesDevCliente.pas',
- uIEditorAlbaranDevCliente in 'View\uIEditorAlbaranDevCliente.pas';
+ uIEditorAlbaranDevCliente in 'View\uIEditorAlbaranDevCliente.pas',
+ uIDialogListaAlbaranesCliEnvioEMail in 'View\uIDialogListaAlbaranesCliEnvioEMail.pas';
end.
diff --git a/Source/Modulos/Albaranes de cliente/Controller/View/uIDialogListaAlbaranesCliEnvioEMail.pas b/Source/Modulos/Albaranes de cliente/Controller/View/uIDialogListaAlbaranesCliEnvioEMail.pas
new file mode 100644
index 00000000..dd201933
--- /dev/null
+++ b/Source/Modulos/Albaranes de cliente/Controller/View/uIDialogListaAlbaranesCliEnvioEMail.pas
@@ -0,0 +1,21 @@
+unit uIDialogListaAlbaranesCliEnvioEMail;
+
+interface
+
+uses
+ uBizAlbaranesCliente, uAlbaranesClienteController;
+
+type
+ IDialogListaAlbaranesCliEnvioEMail = interface
+ ['{2C6DBF4E-28D8-49A6-9FF3-13AA5C6F6CF1}']
+ function GetAlbaranes: IBizAlbaranCliente;
+ procedure SetAlbaranes(const Value: IBizAlbaranCliente);
+ property Albaranes: IBizAlbaranCliente read GetAlbaranes write SetAlbaranes;
+ function ShowModal : Integer;
+ procedure Release;
+ end;
+
+
+implementation
+
+end.
diff --git a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas
index cfdbc577..7079d944 100644
--- a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas
+++ b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas
@@ -65,6 +65,13 @@ type
function ValidarSituacion(ASituacion: String;
AFechaEnvio : TDateTime = 0;
AFechaRecibido : TDateTime = 0) : Boolean;
+
+ function EnviarEmailAlbaranes(AAlbaranes : IBizAlbaranCliente): Boolean;
+ function GenerarEmailAlbaran(AAlbaran : IBizAlbaranCliente): Boolean;
+ function EnviarAlbaranPorEMail(AAlbaran: IBizAlbaranCliente;
+ const AEnviarDirectamente: Boolean = True;
+ const ADireccionEMail: String = ''; const AAsuntoEMail: String = '';
+ const ATextoEMail: String = ''): Boolean;
end;
TAlbaranesClienteController = class(TObservador, IAlbaranesClienteController)
@@ -143,6 +150,13 @@ type
function Print(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false): Boolean;
procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
+
+ function EnviarEmailAlbaranes(AAlbaranes : IBizAlbaranCliente): Boolean;
+ function GenerarEmailAlbaran(AAlbaran : IBizAlbaranCliente): Boolean;
+ function EnviarAlbaranPorEMail(AAlbaran: IBizAlbaranCliente;
+ const AEnviarDirectamente: Boolean = True;
+ const ADireccionEMail: String = ''; const AAsuntoEMail: String = '';
+ const ATextoEMail: String = ''): Boolean;
end;
implementation
@@ -156,7 +170,9 @@ uses
uIEditorElegirAlbaranesCliente, uIEditorDireccionEntregaAlbaranCliente,
schContactosClient_Intf, uAlbaranesClienteReportController, uControllerDetallesBase,
uPedidosClienteController, uBizPedidosCliente, uBizDetallesPedidoCliente,
- schPedidosClienteClient_Intf, uDialogUtils, Windows, Forms, Dialogs, uGUIBase;
+ schPedidosClienteClient_Intf, uDialogUtils, Windows, Forms, Dialogs, uGUIBase,
+
+ uIDialogListaAlbaranesCliEnvioEMail, uSistemaFunc, uStringsUtils, uDialogElegirEMail, uEMailUtils;
@@ -742,6 +758,104 @@ begin
end;
end;
+function TAlbaranesClienteController.EnviarAlbaranPorEMail(
+ AAlbaran: IBizAlbaranCliente; const AEnviarDirectamente: Boolean;
+ const ADireccionEMail, AAsuntoEMail, ATextoEMail: String): Boolean;
+var
+ AReportController : IAlbaranesClienteReportController;
+ AFicheroTMP : TFileName;
+ AEMail : String;
+ AAsunto : String;
+ AListaEmail : TStringList;
+begin
+
+ if not Assigned(AAlbaran) then
+ raise Exception.Create ('Albaran no asignada (EnviarAlbaranPorEMail)');
+
+ if AAlbaran.DataTable.Active then
+ AAlbaran.DataTable.Active := True;
+
+ RecuperarCliente(AAlbaran);
+ AAlbaran.Cliente.DataTable.Active := True;
+
+ AFicheroTMP := DarFicheroPDFTemporal(EscapeIllegalChars(AAlbaran.REFERENCIA));
+
+ if not EsCadenaVacia(ADireccionEMail) then
+ AEMail := ADireccionEMail
+ else begin
+ AListaEmail := TStringList.Create;
+ try
+ if not EsCadenaVacia(AAlbaran.Cliente.EMAIL_ADMINISTRACION) then
+ AListaEmail.Add(AAlbaran.Cliente.EMAIL_ADMINISTRACION);
+
+ if not ElegirEMail(AListaEmail, AEMail) then
+ Exit;
+ finally
+ FreeANDNIL(AListaEmail);
+ end;
+ end;
+
+ if not EsCadenaVacia(AAsuntoEMail) then
+ AAsunto := AAsuntoEMail
+ else
+ begin
+ if (AAlbaran.TIPO = CTE_TIPO_ALBARAN_DEV) then
+ AAsunto := 'Orden devolución ' + AAlbaran.REFERENCIA
+ else
+ AAsunto := 'Albarán ' + AAlbaran.REFERENCIA;
+ end;
+
+ ShowHourglassCursor;
+ Application.ProcessMessages;
+
+ AReportController := TAlbaranesClienteReportController.Create;
+ try
+ AReportController.ExportToPDF(AAlbaran.ID, AFicheroTMP);
+ Result := EnviarEMailMAPI(AAsunto, ATextoEMail, AFicheroTMP, '', '', AAlbaran.Cliente.NOMBRE, AEMail, AEnviarDirectamente);
+ if Result then
+// _AnadirMarcaEnvioCorreo(AAlbaran);
+ finally
+ SysUtils.DeleteFile(AFicheroTMP);
+ AReportController := NIL;
+ HideHourglassCursor;
+ Application.ProcessMessages;
+ end;
+end;
+
+function TAlbaranesClienteController.EnviarEmailAlbaranes(
+ AAlbaranes: IBizAlbaranCliente): Boolean;
+var
+ ADialog : IDialogListaAlbaranesCliEnvioEMail;
+ ARespuesta : Integer;
+begin
+ ADialog := NIL;
+
+ if not Assigned(AAlbaranes) then
+ raise Exception.Create ('Albaranes no asignadas (EnviarAlbaranesCliPorEMail)');
+
+ if AAlbaranes.DataTable.Active then
+ AAlbaranes.DataTable.Active := True;
+
+ ShowHourglassCursor;
+ try
+ CreateEditor('DialogListaAlbaranesCliEnvioEMail', IDialogListaAlbaranesCliEnvioEMail, ADialog);
+
+ if Assigned(ADialog) then
+ begin
+ try
+ ADialog.Albaranes := AAlbaranes;
+ ARespuesta := ADialog.ShowModal;
+ Result := (ARespuesta = mrOK)
+ finally
+ ADialog.Release;
+ end;
+ end;
+ finally
+ ADialog := NIL;
+ HideHourglassCursor;
+ end;
+end;
+
function TAlbaranesClienteController.EsEliminable(AAlbaran: IBizAlbaranCliente): Boolean;
begin
if not Assigned(AAlbaran) then
@@ -1042,6 +1156,24 @@ begin
end;
end;
+function TAlbaranesClienteController.GenerarEmailAlbaran(
+ AAlbaran: IBizAlbaranCliente): Boolean;
+begin
+ if not Assigned(AAlbaran) then
+ raise Exception.Create ('Pedidos no asignadas (GenerarEmailPedido)');
+
+ if AAlbaran.DataTable.Active then
+ AAlbaran.DataTable.Active := True;
+
+ ShowHourglassCursor;
+ try
+ RecuperarCliente(AAlbaran);
+ EnviarAlbaranPorEMail(AAlbaran, False, AAlbaran.Cliente.EMAIL_ADMINISTRACION);
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
function TAlbaranesClienteController.GenerarOrdenDev(AAlbaran: IBizAlbaranCliente): IBizAlbaranCliente;
var
AOrden : IBizAlbaranCliente;
diff --git a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteReportController.pas b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteReportController.pas
index fe746ba5..f9376766 100644
--- a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteReportController.pas
+++ b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteReportController.pas
@@ -14,6 +14,7 @@ type
function Print(const AID : String): Boolean;
procedure EtiquetasPreview(const AID : integer; Const withRefCliente: Boolean);
procedure EtiquetasPrint(const AID : integer; Const withRefCliente: Boolean);
+ function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean;
end;
TAlbaranesClienteReportController = class(TInterfacedObject, IAlbaranesClienteReportController)
@@ -29,6 +30,7 @@ type
function Print(const AID : String): Boolean;
procedure EtiquetasPreview(const AID : integer; const withRefCliente: Boolean);
procedure EtiquetasPrint(const AID : integer; const withRefCliente: Boolean);
+ function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean;
end;
@@ -37,7 +39,7 @@ implementation
uses
uROTypes, uEditorRegistryUtils, uIEditorAlbaranesClientePreview,
uEditorPreview, uDataModuleAlbaranesCliente, uEditorBase, cxControls,
- schAlbaranesClienteClient_Intf;
+ schAlbaranesClienteClient_Intf, uStringsUtils;
{ TAlbaranesClienteReportController }
@@ -107,6 +109,28 @@ begin
AEditor.Print
end;
+function TAlbaranesClienteReportController.ExportToPDF(const AID: Integer; const AFileName: String): Boolean;
+var
+ AStream: Binary;
+begin
+ Result := False;
+ if EsCadenaVacia(AFileName) then
+ Exit;
+
+ ShowHourglassCursor;
+ try
+ AStream := FDataModule.GetRptPDF(AID, True);
+ try
+ AStream.SaveToFile(AFileName);
+ Result := True;
+ finally
+ FreeAndNil(AStream);
+ end;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
procedure TAlbaranesClienteReportController.Preview(const AID : String);
var
AStream: Binary;
diff --git a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas
index 98593ab2..ce1d3d38 100644
--- a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas
+++ b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas
@@ -40,6 +40,7 @@ type
// Report
function GetReport(const AID: String; const ShowLogotipo: Boolean = False): Binary;
function GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
+ function GetRptPDF(const AID: Integer; const ShowLogotipo: Boolean = False): Binary;
end;
implementation
@@ -81,6 +82,20 @@ begin
Result := (RORemoteService as IsrvAlbaranesCliente).GenerateReport(AID, ShowLogotipo)
end;
+function TDataModuleAlbaranesCliente.GetRptPDF(const AID: Integer;
+ const ShowLogotipo: Boolean): Binary;
+var
+ AParam : TIntegerArray;
+begin
+ AParam := TIntegerArray.Create;
+ try
+ AParam.Add(AID);
+ Result := (RORemoteService as IsrvAlbaranesCliente).GenerarReportPDF(AParam, ShowLogotipo)
+ finally
+ FreeANDNIL(AParam)
+ end;
+end;
+
function TDataModuleAlbaranesCliente.NewItem: IBizAlbaranCliente;
begin
Result := GetItem(ID_NULO)
diff --git a/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesClienteReport.pas b/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesClienteReport.pas
index 4886639e..d0822d64 100644
--- a/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesClienteReport.pas
+++ b/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesClienteReport.pas
@@ -9,7 +9,8 @@ type
IDataModuleAlbaranesClienteReport = interface
['{42C55204-5AB9-403E-8385-1A62B02D8234}']
function GetReport(const AID: String; const ShowLogotipo: Boolean = False): Binary;
- function GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
+ function GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
+ function GetRptPDF(const AID: Integer; const ShowLogotipo: Boolean = False): Binary;
end;
implementation
diff --git a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.dfm b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.dfm
index bd77cd8c..bd3f54ec 100644
--- a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.dfm
+++ b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.dfm
@@ -1404,4 +1404,18 @@ object RptAlbaranesCliente: TRptAlbaranesCliente
Left = 344
Top = 16
end
+ object frxPDFExport1: TfrxPDFExport
+ ShowDialog = False
+ UseFileCache = True
+ ShowProgress = False
+ PrintOptimized = True
+ Outline = True
+ Author = 'FactuGES'
+ Subject = 'FactuGES'
+ Background = False
+ Creator = 'FactuGES'
+ HTMLTags = True
+ Left = 360
+ Top = 344
+ end
end
diff --git a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas
index 409010d0..7282f983 100644
--- a/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas
+++ b/Source/Modulos/Albaranes de cliente/Reports/uRptAlbaranesCliente_Server.pas
@@ -7,7 +7,7 @@ uses
Dialogs, frxClass, frxDBSet, uDAScriptingProvider,
uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient,
frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes,
- uDAInterfaces;
+ uDAInterfaces, FactuGES_Intf, frxExportPDF;
type
TRptAlbaranesCliente = class(TDataModule)
@@ -28,16 +28,18 @@ type
schReport: TDASchema;
DataDictionary: TDADataDictionary;
frxReport: TfrxReport;
+ frxPDFExport1: TfrxPDFExport;
procedure DataModuleCreate(Sender: TObject);
procedure frxReportGetValue(const VarName: string; var Value: Variant);
private
FConnection: IDAConnection;
FShowLogotipo: Boolean;
//Genera cada uno de los albaranes a imprimir
- procedure GenerarAlbaran(const ID: integer); overload;
+ procedure _GenerarAlbaran(const ID: integer); overload;
public
function GenerarAlbaran(const AID : String; const AConLogotipo: Boolean = False): Binary; overload;
function GenerarEtiquetas(const AID : Integer; withRefCliente: Boolean): Binary;
+ function GenerarReportEnPDF(const ListaID : TIntegerArray; const AConLogotipo: Boolean = False): Binary;
end;
implementation
@@ -74,21 +76,17 @@ var
i: Integer;
begin
Result := Binary.Create;
- FConnection.BeginTransaction;
-
try
- FShowLogotipo := AConLogotipo;
+ FShowLogotipo := AConLogotipo;
ID_Albaranes := TStringList.Create;
ID_Albaranes.CommaText := AID;
//Vamos generando todos y cada uno de los albaranes recibidos
for i := 0 to ID_Albaranes.Count - 1 do
- GenerarAlbaran(StrToInt(ID_Albaranes.Strings[i]));
+ _GenerarAlbaran(StrToInt(ID_Albaranes.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
-
finally
- FConnection.RollbackTransaction;
end;
end;
@@ -98,13 +96,14 @@ begin
Value := FShowLogotipo;
end;
-procedure TRptAlbaranesCliente.GenerarAlbaran(const ID: integer);
+procedure TRptAlbaranesCliente._GenerarAlbaran(const ID: integer);
var
AStream: TMemoryStream;
dsMaster: IDADataset;
dsDetail: IDADataset;
begin
AStream := TMemoryStream.Create;
+ FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
dsMaster := schReport.NewDataset(FConnection, ds_InformeCabecera, ['ID'], [ID]);
@@ -122,6 +121,7 @@ begin
frxReport.PrepareReport(False);
finally
+ FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream.Free;
dsMaster := Nil;
dsDetail := Nil;
@@ -162,4 +162,22 @@ begin
end;
end;
+function TRptAlbaranesCliente.GenerarReportEnPDF(const ListaID: TIntegerArray;
+ const AConLogotipo: Boolean): Binary;
+var
+ i: Integer;
+begin
+ FShowLogotipo := AConLogotipo;
+ Result := Binary.Create;
+ try
+ //Vamos generando todos y cada uno de los presupuestos recibidos
+ for i := 0 to ListaID.Count - 1 do
+ _GenerarAlbaran(ListaID.Items[i]);
+
+ frxPDFExport1.Stream := Result;
+ frxReport.Export(frxPDFExport1)
+ finally
+ 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 8043f739..c26c8ad3 100644
--- a/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.pas
+++ b/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.pas
@@ -40,6 +40,7 @@ type
function GetNextAutoInc(const GeneratorName: String): Integer;
function GenerateReport(const ID: String; const ShowLogotipo: Boolean): Binary;
function GenerateEtiquetas(const ID: Integer; const withRefCliente: Boolean): Binary;
+ function GenerarReportPDF(const ListaID: TIntegerArray; const ShowLogotipo: Boolean): Binary;
end;
implementation
@@ -82,6 +83,19 @@ begin
bpAlbaranesCliente.BusinessRulesID := BIZ_SERVER_ALBARAN_CLIENTE;
end;
+function TsrvAlbaranesCliente.GenerarReportPDF(const ListaID: TIntegerArray;
+ const ShowLogotipo: Boolean): Binary;
+var
+ AReportGenerator : TRptAlbaranesCliente;
+begin
+ AReportGenerator := TRptAlbaranesCliente.Create(nil);
+ try
+ Result := AReportGenerator.GenerarReportEnPDF(ListaID, ShowLogotipo);
+ finally
+ FreeAndNIL(AReportGenerator);
+ end;
+end;
+
function TsrvAlbaranesCliente.GenerateEtiquetas(const ID: Integer; const withRefCliente: Boolean): Binary;
var
AReportGenerator : TRptAlbaranesCliente;
diff --git a/Source/Modulos/Albaranes de cliente/Views/AlbaranesCliente_view.dpk b/Source/Modulos/Albaranes de cliente/Views/AlbaranesCliente_view.dpk
index 0944f7d4..4712c4f6 100644
--- a/Source/Modulos/Albaranes de cliente/Views/AlbaranesCliente_view.dpk
+++ b/Source/Modulos/Albaranes de cliente/Views/AlbaranesCliente_view.dpk
@@ -100,7 +100,8 @@ requires
Inventario_controller,
JSDialog100,
PedCli_AlbCli_relation,
- AlbCli_FacCli_relation;
+ AlbCli_FacCli_relation,
+ dxGDIPlusD10;
contains
uAlbaranesClienteViewRegister in 'uAlbaranesClienteViewRegister.pas',
@@ -117,6 +118,7 @@ contains
uEditorAlbaranesDevCliente in 'uEditorAlbaranesDevCliente.pas' {fEditorAlbaranesDevCliente: TCustomEditor},
uViewAlbaranesDevCliente in 'uViewAlbaranesDevCliente.pas' {frViewAlbaranesDevCliente: TCustomView},
uEditorAlbaranDevCliente in 'uEditorAlbaranDevCliente.pas' {fEditorAlbaranDevCliente: TCustomEditor},
- uViewAlbaranDevCliente in 'uViewAlbaranDevCliente.pas' {frViewAlbaranDevCliente: TCustomView};
+ uViewAlbaranDevCliente in 'uViewAlbaranDevCliente.pas' {frViewAlbaranDevCliente: TCustomView},
+ uDialogListaAlbaranesCliEnvioEMail in 'uDialogListaAlbaranesCliEnvioEMail.pas' {fDialogListaAlbaranesCliEnvioEMail: TCustomEditor};
end.
diff --git a/Source/Modulos/Albaranes de cliente/Views/uAlbaranesClienteViewRegister.pas b/Source/Modulos/Albaranes de cliente/Views/uAlbaranesClienteViewRegister.pas
index 15b329bf..c1935599 100644
--- a/Source/Modulos/Albaranes de cliente/Views/uAlbaranesClienteViewRegister.pas
+++ b/Source/Modulos/Albaranes de cliente/Views/uAlbaranesClienteViewRegister.pas
@@ -10,7 +10,8 @@ implementation
uses
uEditorRegistryUtils, uEditorAlbaranesCliente, uEditorAlbaranCliente,
uEditorElegirArticulosAlbaranCliente, uEditorAlbaranesClienteReport,
- uEditorElegirAlbaranesCliente, uEditorAlbaranesDevCliente, uEditorAlbaranDevCliente;
+ uEditorElegirAlbaranesCliente, uEditorAlbaranesDevCliente, uEditorAlbaranDevCliente,
+ uDialogListaAlbaranesCliEnvioEMail;
procedure RegisterViews;
begin
@@ -21,6 +22,7 @@ begin
EditorRegistry.RegisterClass(TfEditorElegirArticulosAlbaranCliente, 'EditorElegirArticulosAlbaranesCliente');
EditorRegistry.RegisterClass(TfEditorAlbaranesClientePreview, 'EditorAlbaranesClientePreview');
EditorRegistry.RegisterClass(TfEditorElegirAlbaranesCliente, 'EditorElegirAlbaranesCliente');
+ EditorRegistry.RegisterClass(TfDialogListaAlbaranesCliEnvioEMail, 'DialogListaAlbaranesCliEnvioEMail');
end;
procedure UnregisterViews;
@@ -32,6 +34,7 @@ begin
EditorRegistry.UnRegisterClass(TfEditorElegirArticulosAlbaranCliente);
EditorRegistry.UnRegisterClass(TfEditorAlbaranesClientePreview);
EditorRegistry.UnRegisterClass(TfEditorElegirAlbaranesCliente);
+ EditorRegistry.UnRegisterClass(TfDialogListaAlbaranesCliEnvioEMail);
end;
end.
diff --git a/Source/Modulos/Albaranes de cliente/Views/uDialogListaAlbaranesCliEnvioEMail.dfm b/Source/Modulos/Albaranes de cliente/Views/uDialogListaAlbaranesCliEnvioEMail.dfm
new file mode 100644
index 00000000..78f2e60f
--- /dev/null
+++ b/Source/Modulos/Albaranes de cliente/Views/uDialogListaAlbaranesCliEnvioEMail.dfm
@@ -0,0 +1,89 @@
+inherited fDialogListaAlbaranesCliEnvioEMail: TfDialogListaAlbaranesCliEnvioEMail
+ Caption = 'Enviar albaranes por correo electr'#243'nico'
+ ClientHeight = 432
+ ClientWidth = 735
+ ExplicitWidth = 741
+ ExplicitHeight = 457
+ PixelsPerInch = 96
+ TextHeight = 13
+ inherited pnlBotones: TFlowPanel
+ Top = 376
+ Width = 735
+ ExplicitTop = 382
+ ExplicitWidth = 735
+ inherited Button1: TButton
+ Left = 639
+ Caption = '&Salir'
+ ExplicitLeft = 639
+ end
+ inherited Button2: TButton
+ Left = 528
+ Width = 96
+ ExplicitLeft = 528
+ ExplicitWidth = 96
+ end
+ end
+ inherited FlowPanel1: TFlowPanel
+ Width = 735
+ Height = 376
+ ExplicitWidth = 735
+ ExplicitHeight = 376
+ inherited lblInstruccion: TLabel
+ Width = 320
+ Caption = 'Enviar albaranes por correo electr'#243'nico'
+ Font.Style = [fsBold]
+ ExplicitWidth = 320
+ end
+ inherited Label2: TLabel
+ Height = 51
+ Caption =
+ 'Se generar'#225'n correos electr'#243'nicos autom'#225'ticos adjuntando los alb' +
+ 'aranes elegidos en formato PDF. S'#243'lo se tendr'#225'n en cuenta los cl' +
+ 'ientes que tengan relleno su e-mail administrativo.'
+ WordWrap = True
+ ExplicitHeight = 51
+ end
+ inherited ListView1: TListView
+ Top = 121
+ Width = 658
+ Height = 232
+ Columns = <
+ item
+ Caption = 'Documento'
+ MaxWidth = 75
+ MinWidth = 75
+ Width = 75
+ end
+ item
+ Caption = 'Destinatario'
+ MaxWidth = 300
+ Width = 280
+ end
+ item
+ Caption = 'Direcci'#243'n E-Mail'
+ MaxWidth = 250
+ Width = 150
+ end
+ item
+ Caption = 'Estado'
+ MaxWidth = 250
+ Width = 149
+ end>
+ ExplicitTop = 121
+ ExplicitWidth = 658
+ ExplicitHeight = 232
+ end
+ end
+ inherited ActionList1: TActionList
+ Left = 8
+ Top = 352
+ inherited actAceptar: TAction
+ Caption = '&Generar correos'
+ OnExecute = actAceptarExecute
+ OnUpdate = actAceptarUpdate
+ end
+ inherited actCancelar: TAction
+ OnExecute = actCancelarExecute
+ end
+ end
+end
diff --git a/Source/Modulos/Albaranes de cliente/Views/uDialogListaAlbaranesCliEnvioEMail.pas b/Source/Modulos/Albaranes de cliente/Views/uDialogListaAlbaranesCliEnvioEMail.pas
new file mode 100644
index 00000000..e584a585
--- /dev/null
+++ b/Source/Modulos/Albaranes de cliente/Views/uDialogListaAlbaranesCliEnvioEMail.pas
@@ -0,0 +1,166 @@
+unit uDialogListaAlbaranesCliEnvioEMail;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, uDialogBase, ActnList, StdCtrls, ExtCtrls, ComCtrls,
+ uDialogListaEnvioEMail, uIDialogListaAlbaranesCliEnvioEMail, uAlbaranesClienteController,
+ uBizAlbaranesCliente;
+
+type
+ TfDialogListaAlbaranesCliEnvioEMail = class(TfDialogListaEnvioEMail, IDialogListaAlbaranesCliEnvioEMail)
+ procedure actCancelarExecute(Sender: TObject);
+ procedure actAceptarUpdate(Sender: TObject);
+ procedure actAceptarExecute(Sender: TObject);
+ private
+ FAlbaranes : IBizAlbaranCliente;
+ FController : IAlbaranesClienteController;
+ protected
+ function GetAlbaranes: IBizAlbaranCliente;
+ procedure SetAlbaranes(const Value: IBizAlbaranCliente);
+
+ procedure RellenarLista;
+ procedure BorrarLista;
+ public
+ constructor Create(AOwner: TComponent); override;
+ property Albaranes: IBizAlbaranCliente read GetAlbaranes write SetAlbaranes;
+ end;
+
+implementation
+
+uses
+ schAlbaranesClienteClient_Intf, uStringsUtils, cxControls;
+
+{$R *.dfm}
+
+
+{ TfDialogListaAlbaranesEnvioEMail }
+
+procedure TfDialogListaAlbaranesCliEnvioEMail.actAceptarExecute(Sender: TObject);
+var
+ i : Integer;
+begin
+ ShowHourglassCursor;
+ Application.ProcessMessages;
+ try
+ FAlbaranes.First;
+ FController.RecuperarCliente(FAlbaranes);
+ FAlbaranes.Cliente.DataTable.Active := True;
+ try
+ for i := 0 to FAlbaranes.DataTable.RecordCount - 1 do
+ begin
+ if not EsCadenaVacia(FAlbaranes.Cliente.EMAIL_ADMINISTRACION) then
+ begin
+ if FController.EnviarAlbaranPorEMail(FAlbaranes, True, FAlbaranes.Cliente.EMAIL_ADMINISTRACION) then
+ begin
+ ListView1.Items[i].SubItems[2] := 'Correo generado';
+ ModalResult := mrOk;
+ end
+ else
+ ListView1.Items[i].SubItems[2] := 'Error al generar correo';
+ Self.Update;
+ Application.ProcessMessages;
+ end;
+
+ FAlbaranes.Next;
+ FController.RecuperarCliente(FAlbaranes);
+ FAlbaranes.Cliente.DataTable.Active := True;
+ end;
+ Button2.Enabled := False;
+ finally
+ ListView1.Items.EndUpdate;
+ end;
+ finally
+ HideHourglassCursor;
+ end;
+
+ Button1.SetFocus;
+end;
+
+procedure TfDialogListaAlbaranesCliEnvioEMail.actAceptarUpdate(Sender: TObject);
+begin
+ inherited;
+ (Sender as TAction).Enabled := (ListView1.Items.Count > 0)
+end;
+
+procedure TfDialogListaAlbaranesCliEnvioEMail.actCancelarExecute(Sender: TObject);
+begin
+ inherited;
+ ModalResult := mrOk;
+end;
+
+procedure TfDialogListaAlbaranesCliEnvioEMail.BorrarLista;
+begin
+ ListView1.Items.Clear;
+end;
+
+constructor TfDialogListaAlbaranesCliEnvioEMail.Create(AOwner: TComponent);
+begin
+ inherited;
+ ModalResult := mrCancel;
+ FController := TAlbaranesClienteController.Create;
+end;
+
+function TfDialogListaAlbaranesCliEnvioEMail.GetAlbaranes: IBizAlbaranCliente;
+begin
+ Result := FAlbaranes;
+end;
+
+procedure TfDialogListaAlbaranesCliEnvioEMail.RellenarLista;
+var
+ i : Integer;
+begin
+ ListView1.Items.BeginUpdate;
+ ListView1.Items.Clear;
+
+ FAlbaranes.First;
+ FAlbaranes.DataTable.DisableControls;
+ try
+ for i := 0 to FAlbaranes.DataTable.RecordCount - 1 do
+ begin
+ FController.RecuperarCliente(FAlbaranes);
+ FAlbaranes.Cliente.DataTable.Active := True;
+
+ with ListView1.Items.Add do
+ begin
+ Caption := FAlbaranes.REFERENCIA;
+ SubItems.Add(FAlbaranes.NOMBRE);
+ SubItems.Add(FAlbaranes.Cliente.EMAIL_ADMINISTRACION);
+
+ if EsCadenaVacia(FAlbaranes.Cliente.EMAIL_ADMINISTRACION) then
+ SubItems.Add('Sin dirección e-mail administrativa')
+ else
+ SubItems.Add('')
+ end;
+ FAlbaranes.Next;
+ end;
+ finally
+ FAlbaranes.DataTable.EnableControls;
+ ListView1.Items.EndUpdate;
+ end;
+end;
+
+procedure TfDialogListaAlbaranesCliEnvioEMail.SetAlbaranes(
+ const Value: IBizAlbaranCliente);
+begin
+ FAlbaranes := Value;
+
+ if Assigned(FAlbaranes) then
+ begin
+ FAlbaranes.DataTable.Open;
+
+ if (FAlbaranes.TIPO = CTE_TIPO_ALBARAN_DEV) then
+ begin
+ Self.Caption := 'Enviar órdenes de devolución por correo electrónico';
+ lblInstruccion.Caption := 'Enviar órdenes de devolución por correo electrónico';
+ Label2.Caption := 'Se generarán correos electrónicos automáticos adjuntando las órdenes de devolución elegidas en formato PDF. Sólo se tendrán en cuenta los clientes que tengan relleno su e-mail administrativo.';
+ end;
+
+ RellenarLista;
+ end
+ else
+ BorrarLista;
+end;
+
+end.
diff --git a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.dfm b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.dfm
index 348589b7..2e0e31b3 100644
--- a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.dfm
+++ b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.dfm
@@ -9,7 +9,7 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
inherited JvNavPanelHeader: TJvNavPanelHeader
Width = 855
Caption = 'Lista de albaranes de cliente'
- ExplicitWidth = 583
+ ExplicitWidth = 855
inherited Image1: TImage
Left = 828
Picture.Data = {
@@ -124,11 +124,14 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
end
inherited TBXDock: TTBXDock
Width = 855
- ExplicitWidth = 583
+ ExplicitWidth = 855
inherited tbxMain: TTBXToolbar
- ExplicitWidth = 638
+ ExplicitWidth = 746
object TBXSeparatorItem17: TTBXSeparatorItem [10]
end
+ object TBXItem40: TTBXItem [14]
+ Action = actEnviarEMail
+ end
end
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 855
@@ -169,7 +172,8 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
inherited StatusBar: TJvStatusBar
Top = 430
Width = 855
- ExplicitWidth = 583
+ ExplicitTop = 430
+ ExplicitWidth = 855
end
inherited EditorActionList: TActionList
inherited actNuevo: TAction
@@ -225,6 +229,12 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
ImageIndex = 23
OnExecute = actGenerarOrdenExecute
end
+ object actEnviarEMail: TAction
+ Category = 'Acciones'
+ Caption = 'Enviar por e-mail...'
+ OnExecute = actEnviarEMailExecute
+ OnUpdate = actEnviarEMailUpdate
+ end
end
inherited SmallImages: TPngImageList
PngImages = <
diff --git a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas
index 986323cc..b3b956a9 100644
--- a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas
+++ b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas
@@ -38,6 +38,8 @@ type
JsListaAlbaranesNoEliminados: TJSDialog;
actGenerarOrden: TAction;
TBXItem39: TTBXItem;
+ actEnviarEMail: TAction;
+ TBXItem40: TTBXItem;
procedure FormShow(Sender: TObject);
procedure actGenerarFacturaUpdate(Sender: TObject);
procedure actGenerarFacturaExecute(Sender: TObject);
@@ -51,6 +53,8 @@ type
procedure actGenerarEtiquetasExecute(Sender: TObject);
procedure actGenerarEtiquetasUpdate(Sender: TObject);
procedure actGenerarOrdenExecute(Sender: TObject);
+ procedure actEnviarEMailExecute(Sender: TObject);
+ procedure actEnviarEMailUpdate(Sender: TObject);
protected
FAlbaranes: IBizAlbaranCliente;
@@ -88,7 +92,7 @@ uses
uBizPedidosCliente, uDialogUtils, schAlbaranesClienteClient_Intf,
uFacturasClienteController, uBizFacturasCliente, uInventarioController,
uEditorBase, uGenerarAlbaranesCliUtils, uGenerarFacturasCliAlbCliUtils,
- cxCustomData, uGridUtils, uDBSelectionListUtils;
+ cxCustomData, uGridUtils, uDBSelectionListUtils, cxControls;
{$R *.dfm}
@@ -196,6 +200,40 @@ begin
FController.GenerarOrdenDev(Albaranes);
end;
+procedure TfEditorAlbaranesCliente.actEnviarEMailExecute(Sender: TObject);
+var
+ AAlbaranes : IBizAlbaranCliente;
+begin
+ inherited;
+
+ if ViewGrid.NumSeleccionados = 1 then
+ FController.GenerarEmailAlbaran(Albaranes)
+ else begin
+ ShowHourglassCursor;
+ try
+ SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (Albaranes as ISeleccionable).SelectedRecords);
+ AAlbaranes := (Controller as IAlbaranesClienteController).ExtraerSeleccionados(Albaranes, ViewGrid) as IBizAlbaranCliente;
+
+ if Assigned(AAlbaranes) then
+ if FController.EnviarEmailAlbaranes(AAlbaranes) then
+ RefrescarInterno;
+ finally
+ AAlbaranes := NIL;
+ HideHourglassCursor;
+ end;
+ end;
+end;
+
+procedure TfEditorAlbaranesCliente.actEnviarEMailUpdate(Sender: TObject);
+begin
+ inherited;
+ if HayDatos and Assigned(ViewGrid) then
+ (Sender as TAction).Enabled := ViewGrid.esSeleccionCeldaDatos
+ and (ViewGrid.NumSeleccionados > 0)
+ else
+ (Sender as TAction).Enabled := False;
+end;
+
procedure TfEditorAlbaranesCliente.actEnviarExecute(Sender: TObject);
var
AInventarioController : IInventarioController;
diff --git a/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.dfm b/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.dfm
index e3cd9737..71a8383c 100644
--- a/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.dfm
+++ b/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.dfm
@@ -1043,13 +1043,14 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor
Top = 158
end
object frxReport: TfrxReport
- Version = '3.23.7'
+ Version = '4.3'
DotMatrixReport = False
EngineOptions.DoublePass = True
IniFile = '\Software\Fast Reports'
PreviewOptions.Buttons = [pbPrint, pbLoad, pbSave, pbExport, pbZoom, pbFind, pbOutline, pbPageSetup, pbTools, pbEdit, pbNavigator, pbExportQuick]
PreviewOptions.Zoom = 1.000000000000000000
PrintOptions.Printer = 'Por defecto'
+ PrintOptions.PrintOnSheet = 0
ReportOptions.CreateDate = 39065.872423495400000000
ReportOptions.LastChange = 39290.783958333330000000
ScriptLanguage = 'PascalScript'
@@ -1157,29 +1158,6 @@ object RptAlbaranesProveedor: TRptAlbaranesProveedor
OnStartReport = 'frxReportOnStartReport'
Left = 169
Top = 16
- Datasets = <
- item
- DataSet = frxDBCabecera
- DataSetName = 'frxDBCabecera'
- end
- item
- DataSet = frxDBDetalles
- DataSetName = 'frxDBDetalles'
- end>
- Variables = <
- item
- Name = ' Paginacion'
- Value = Null
- end
- item
- Name = 'TotalPaginas'
- Value = Null
- end
- item
- Name = 'Pagina'
- Value = Null
- end>
- Style = <>
end
object frxDBCabecera: TfrxDBDataset
UserName = 'frxDBCabecera'
diff --git a/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.pas b/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.pas
index 71101cf1..77baaf28 100644
--- a/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.pas
+++ b/Source/Modulos/Albaranes de proveedor/Reports/uRptAlbaranesProveedor_Server.pas
@@ -32,7 +32,7 @@ type
private
FConnection: IDAConnection;
//Genera cada uno de los albaranes a imprimir
- procedure GenerarAlbaran(const ID: integer); overload;
+ procedure _GenerarAlbaran(const ID: integer); overload;
public
function GenerarAlbaran(const AID : String): Binary; overload;
end;
@@ -68,30 +68,27 @@ var
i: Integer;
begin
Result := Binary.Create;
- FConnection.BeginTransaction;
-
try
ID_Albaranes := TStringList.Create;
ID_Albaranes.CommaText := AID;
//Vamos generando todos y cada uno de los albaranes recibidos
for i := 0 to ID_Albaranes.Count - 1 do
- GenerarAlbaran(StrToInt(ID_Albaranes.Strings[i]));
+ _GenerarAlbaran(StrToInt(ID_Albaranes.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
-
finally
- FConnection.RollbackTransaction;
end;
end;
-procedure TRptAlbaranesProveedor.GenerarAlbaran(const ID: integer);
+procedure TRptAlbaranesProveedor._GenerarAlbaran(const ID: integer);
var
AStream: TMemoryStream;
dsMaster: IDADataset;
dsDetail: IDADataset;
begin
AStream := TMemoryStream.Create;
+ FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
dsMaster := schReport.NewDataset(FConnection, ds_InformeCabecera, ['ID'], [ID]);
@@ -109,6 +106,7 @@ begin
frxReport.PrepareReport(False);
finally
+ FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream.Free;
dsMaster := Nil;
dsDetail := Nil;
diff --git a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas
index 67b1377b..d580204f 100644
--- a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas
+++ b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas
@@ -112,13 +112,11 @@ type
function EnviarEmailFacturas(AFacturas : IBizFacturaCliente): Boolean;
function GenerarEmailFactura(AFactura : IBizFacturaCliente): Boolean;
-
function EnviarFacturaPorEMail(AFactura: IBizFacturaCliente;
const AEnviarDirectamente: Boolean = True;
const ADireccionEMail: String = ''; const AAsuntoEMail: String = '';
const ATextoEMail: String = ''): Boolean;
-
procedure RecalcularImportes(AFactura: IBizFacturaCliente);
function EsModificable(AFactura: IBizFacturaCliente): Boolean;
function EsEliminable(AFactura: IBizFacturaCliente): Boolean;
diff --git a/Source/Modulos/Facturas de cliente/FacturasCliente_Group.bdsgroup b/Source/Modulos/Facturas de cliente/FacturasCliente_Group.bdsgroup
index c3105ec6..4fac7f7b 100644
--- a/Source/Modulos/Facturas de cliente/FacturasCliente_Group.bdsgroup
+++ b/Source/Modulos/Facturas de cliente/FacturasCliente_Group.bdsgroup
@@ -8,7 +8,9 @@
-
+
+
+
..\..\Base\Base.bdsproj
..\..\Base\ControllerBase\ControllerBase.bdsproj
..\..\Base\GUIBase\GUIBase.bdsproj
@@ -28,14 +30,10 @@
..\..\Cliente\FactuGES.bdsproj
..\..\Servidor\FactuGES_Server.bdsproj
..\Albaranes de cliente\Controller\AlbaranesCliente_controller.bdsproj
- ..\Pedidos de cliente\Model\PedidosCliente_model.bdsproj
..\Facturas de proveedor\Views\FacturasProveedor_view.bdsproj
- ..\Formas de pago\Model\FormasPago_model.bdsproj
- ..\Formas de pago\Data\FormasPago_data.bdsproj
- ..\Formas de pago\Controller\FormasPago_controller.bdsproj
- ..\Formas de pago\Views\FormasPago_view.bdsproj
- ..\Formas de pago\Plugin\FormasPago_plugin.bdsproj
- Base.bpl ControllerBase.bpl GUIBase.bpl Contactos_model.bpl Contactos_data.bpl Contactos_controller.bpl Articulos_model.bpl Articulos_data.bpl Articulos_controller.bpl Contactos_view.bpl Articulos_view.bpl FacturasCliente_model.bpl FacturasCliente_data.bpl FacturasCliente_controller.bpl AlbCli_FacCli_relation.bpl FacturasCliente_view.bpl FactuGES.exe FactuGES_Server.exe AlbaranesCliente_controller.bpl PedidosCliente_model.bpl FacturasProveedor_view.bpl FormasPago_model.bpl FormasPago_data.bpl FormasPago_controller.bpl FormasPago_view.bpl FormasPago_plugin.bpl
+ ..\Pedidos de cliente\Views\PedidosCliente_view.bdsproj
+ ..\Pedidos de cliente\Controller\PedidosCliente_controller.bdsproj
+ Base.bpl ControllerBase.bpl GUIBase.bpl Contactos_model.bpl Contactos_data.bpl Contactos_controller.bpl Articulos_model.bpl Articulos_data.bpl Articulos_controller.bpl Contactos_view.bpl Articulos_view.bpl FacturasCliente_model.bpl FacturasCliente_data.bpl FacturasCliente_controller.bpl AlbCli_FacCli_relation.bpl FacturasCliente_view.bpl FactuGES.exe FactuGES_Server.exe AlbaranesCliente_controller.bpl FacturasProveedor_view.bpl PedidosCliente_view.bpl PedidosCliente_controller.bpl
diff --git a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas
index 1fcfb7b1..53d19779 100644
--- a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas
+++ b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas
@@ -41,7 +41,7 @@ type
procedure _GenerarFactura(const ID: Integer);
public
function GenerarFactura(const ListaID : TIntegerArray;
- const AConLogotipo: Boolean = False): Binary;
+ const AConLogotipo: Boolean = False): Binary;
function GenerarFacturaEnPDF(const ListaID : TIntegerArray;
const AConLogotipo: Boolean = False): Binary;
end;
@@ -105,6 +105,7 @@ var
dsVencimientos : IDADataset;
begin
AStream := TMemoryStream.Create;
+ FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
dsMaster := schReport.NewDataset(FConnection, ds_InformeFacturasCliente, ['ID'], [ID]);
@@ -128,6 +129,7 @@ begin
frxReport.PrepareReport(False);
finally
+ FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream.Free;
dsMaster := Nil;
dsDetail := Nil;
@@ -148,8 +150,6 @@ var
begin
FShowLogotipo := AConLogotipo;
Result := Binary.Create;
- //FConnection.BeginTransaction; <--- Creo que no va a hacer falta.
-
try
//Vamos generando todos y cada uno de los presupuestos recibidos
for i := 0 to ListaID.Count - 1 do
@@ -157,7 +157,6 @@ begin
frxReport.PreviewPages.SaveToStream(Result);
finally
- //FConnection.RollbackTransaction; <--- Creo que no va a hacer falta.
end;
end;
@@ -168,8 +167,6 @@ var
begin
FShowLogotipo := AConLogotipo;
Result := Binary.Create;
- //FConnection.BeginTransaction; <--- Creo que no va a hacer falta.
-
try
//Vamos generando todos y cada uno de los presupuestos recibidos
for i := 0 to ListaID.Count - 1 do
@@ -178,7 +175,6 @@ begin
frxPDFExport1.Stream := Result;
frxReport.Export(frxPDFExport1)
finally
- //FConnection.RollbackTransaction; <--- Creo que no va a hacer falta.
end;
end;
diff --git a/Source/Modulos/Facturas de cliente/Views/uDialogListaFacturasEnvioEMail.dfm b/Source/Modulos/Facturas de cliente/Views/uDialogListaFacturasEnvioEMail.dfm
index 11018caa..6a932265 100644
--- a/Source/Modulos/Facturas de cliente/Views/uDialogListaFacturasEnvioEMail.dfm
+++ b/Source/Modulos/Facturas de cliente/Views/uDialogListaFacturasEnvioEMail.dfm
@@ -1,24 +1,29 @@
inherited fDialogListaFacturasEnvioEMail: TfDialogListaFacturasEnvioEMail
Caption = 'Enviar facturas por correo electr'#243'nico'
ClientHeight = 432
- ExplicitWidth = 629
+ ClientWidth = 735
+ ExplicitWidth = 741
ExplicitHeight = 457
PixelsPerInch = 96
TextHeight = 13
inherited pnlBotones: TFlowPanel
Top = 376
+ Width = 735
ExplicitTop = 376
inherited Button1: TButton
+ Left = 639
Caption = '&Salir'
+ ExplicitLeft = 639
end
inherited Button2: TButton
- Left = 416
+ Left = 528
Width = 96
- ExplicitLeft = 416
+ ExplicitLeft = 528
ExplicitWidth = 96
end
end
inherited FlowPanel1: TFlowPanel
+ Width = 735
Height = 376
ExplicitHeight = 376
inherited lblInstruccion: TLabel
@@ -38,6 +43,7 @@ inherited fDialogListaFacturasEnvioEMail: TfDialogListaFacturasEnvioEMail
end
inherited ListView1: TListView
Top = 121
+ Width = 658
Height = 232
Columns = <
item
@@ -58,10 +64,11 @@ inherited fDialogListaFacturasEnvioEMail: TfDialogListaFacturasEnvioEMail
end
item
Caption = 'Estado'
- MaxWidth = 200
- Width = 100
+ MaxWidth = 250
+ Width = 149
end>
ExplicitTop = 121
+ ExplicitWidth = 658
ExplicitHeight = 232
end
end
diff --git a/Source/Modulos/Facturas de cliente/Views/uDialogListaFacturasEnvioEMail.pas b/Source/Modulos/Facturas de cliente/Views/uDialogListaFacturasEnvioEMail.pas
index 7841727b..151649ac 100644
--- a/Source/Modulos/Facturas de cliente/Views/uDialogListaFacturasEnvioEMail.pas
+++ b/Source/Modulos/Facturas de cliente/Views/uDialogListaFacturasEnvioEMail.pas
@@ -45,22 +45,27 @@ begin
Application.ProcessMessages;
try
FFacturas.First;
+ FController.RecuperarCliente(FFacturas);
+ FFacturas.Cliente.DataTable.Active := True;
try
for i := 0 to FFacturas.DataTable.RecordCount - 1 do
begin
- if EsCadenaVacia(FFacturas.Cliente.EMAIL_ADMINISTRACION) then
- Continue;
-
- if FController.EnviarFacturaPorEMail(FFacturas, True, FFacturas.Cliente.EMAIL_ADMINISTRACION) then
+ if not EsCadenaVacia(FFacturas.Cliente.EMAIL_ADMINISTRACION) then
begin
- ListView1.Items[i].SubItems[2] := 'Correo generado';
- ModalResult := mrOk;
- end
- else
- ListView1.Items[i].SubItems[2] := 'Error al generar correo';
- Self.Update;
- Application.ProcessMessages;
+ if FController.EnviarFacturaPorEMail(FFacturas, True, FFacturas.Cliente.EMAIL_ADMINISTRACION) then
+ begin
+ ListView1.Items[i].SubItems[2] := 'Correo generado';
+ ModalResult := mrOk;
+ end
+ else
+ ListView1.Items[i].SubItems[2] := 'Error al generar correo';
+ Self.Update;
+ Application.ProcessMessages;
+ end;
+
FFacturas.Next;
+ FController.RecuperarCliente(FFacturas);
+ FFacturas.Cliente.DataTable.Active := True;
end;
Button2.Enabled := False;
finally
diff --git a/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.pas b/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.pas
index 1ac86e84..32d708c8 100644
--- a/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.pas
+++ b/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.pas
@@ -100,7 +100,8 @@ begin
AFacturas := (Controller as IFacturasClienteController).ExtraerSeleccionados(Facturas, ViewGrid) as IBizFacturaCliente;
if Assigned(AFacturas) then
- FController.EnviarEmailFacturas(AFacturas);
+ if FController.EnviarEmailFacturas(AFacturas) then
+ RefrescarInterno;
finally
AFacturas := NIL;
HideHourglassCursor;
diff --git a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm
index c4bf1d77..45275d5c 100644
--- a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm
+++ b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.dfm
@@ -1178,7 +1178,7 @@ object RptFacturasProveedor: TRptFacturasProveedor
Top = 158
end
object frxReport: TfrxReport
- Version = '3.23.7'
+ Version = '4.3'
DotMatrixReport = False
EngineOptions.DoublePass = True
IniFile = '\Software\Fast Reports'
@@ -1186,6 +1186,7 @@ object RptFacturasProveedor: TRptFacturasProveedor
PreviewOptions.OutlineWidth = 180
PreviewOptions.Zoom = 1.000000000000000000
PrintOptions.Printer = 'Default'
+ PrintOptions.PrintOnSheet = 0
ReportOptions.CreateDate = 37871.995398692100000000
ReportOptions.LastChange = 39465.864521631940000000
ReportOptions.VersionBuild = '1'
@@ -1324,70 +1325,6 @@ object RptFacturasProveedor: TRptFacturasProveedor
OnStartReport = 'frxReportOnStartReport'
Left = 169
Top = 16
- Datasets = <
- item
- DataSet = frxDBCabecera
- DataSetName = 'frxDBCabecera'
- end
- item
- DataSet = frxDBDetalles
- DataSetName = 'frxDBDetalles'
- end
- item
- DataSet = frxDBDataset1
- DataSetName = 'frxDBVencimientos'
- end>
- Variables = <
- item
- Name = ' Paginacion'
- Value = Null
- end
- item
- Name = 'Pagina'
- Value = Null
- end
- item
- Name = 'TotalPaginas'
- Value = Null
- end>
- Style = <
- item
- Name = 'Concepto normal'
- Color = clNone
- Font.Charset = ANSI_CHARSET
- Font.Color = clWindowText
- Font.Height = -12
- Font.Name = 'Tahoma'
- Font.Style = []
- end
- item
- Name = 'Concepto subtotal'
- Color = clNone
- Font.Charset = ANSI_CHARSET
- Font.Color = clWindowText
- Font.Height = -12
- Font.Name = 'Tahoma'
- Font.Style = [fsBold]
- end
- item
- Name = 'Cabecera de columna'
- Color = 15790320
- Font.Charset = ANSI_CHARSET
- Font.Color = clWindowText
- Font.Height = -12
- Font.Name = 'Tahoma'
- Font.Style = [fsBold]
- Frame.Typ = [ftLeft, ftRight, ftTop, ftBottom]
- end
- item
- Name = 'Concepto titulo'
- Color = clNone
- Font.Charset = ANSI_CHARSET
- Font.Color = clWindowText
- Font.Height = -13
- Font.Name = 'Tahoma'
- Font.Style = [fsBold]
- end>
end
object frxDBCabecera: TfrxDBDataset
UserName = 'frxDBCabecera'
diff --git a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas
index 010b6c0a..834d45c5 100644
--- a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas
+++ b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas
@@ -34,7 +34,7 @@ type
procedure DataModuleCreate(Sender: TObject);
private
FConnection: IDAConnection;
- procedure GenerarFactura(const AFacturaID: integer); overload;
+ procedure _GenerarFactura(const AFacturaID: integer); overload;
public
function GenerarFactura(const AFacturaID : String): Binary; overload;
end;
@@ -71,24 +71,20 @@ var
begin
Result := Binary.Create;
- FConnection.BeginTransaction;
-
try
ID_Facturas := TStringList.Create;
ID_Facturas.CommaText := AFacturaID;
//Vamos generando todos y cada uno de los albaranes recibidos
for i := 0 to ID_Facturas.Count - 1 do
- GenerarFactura(StrToInt(ID_Facturas.Strings[i]));
+ _GenerarFactura(StrToInt(ID_Facturas.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
-
finally
- FConnection.RollbackTransaction;
end;
end;
-procedure TRptFacturasProveedor.GenerarFactura(const AFacturaID: integer);
+procedure TRptFacturasProveedor._GenerarFactura(const AFacturaID: integer);
var
AStream: TMemoryStream;
dsMaster: IDADataset;
@@ -96,6 +92,7 @@ var
dsVencimientos : IDADataset;
begin
AStream := TMemoryStream.Create;
+ FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
dsMaster := schReport.NewDataset(FConnection, ds_InformeFacturasProveedor, ['ID'], [AFacturaID]);
@@ -119,6 +116,7 @@ begin
frxReport.PrepareReport(False);
finally
+ FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream.Free;
dsMaster := Nil;
dsDetail := Nil;
diff --git a/Source/Modulos/Pedidos a proveedor/Reports/uRptPedidosProveedor_Server.dfm b/Source/Modulos/Pedidos a proveedor/Reports/uRptPedidosProveedor_Server.dfm
index aac07404..2fc3c0f5 100644
--- a/Source/Modulos/Pedidos a proveedor/Reports/uRptPedidosProveedor_Server.dfm
+++ b/Source/Modulos/Pedidos a proveedor/Reports/uRptPedidosProveedor_Server.dfm
@@ -713,13 +713,14 @@ object RptPedidosProveedor: TRptPedidosProveedor
Top = 158
end
object frxReport: TfrxReport
- Version = '3.23.7'
+ Version = '4.3'
DotMatrixReport = False
EngineOptions.DoublePass = True
IniFile = '\Software\Fast Reports'
PreviewOptions.Buttons = [pbPrint, pbLoad, pbSave, pbExport, pbZoom, pbFind, pbOutline, pbPageSetup, pbTools, pbEdit, pbNavigator, pbExportQuick]
PreviewOptions.Zoom = 1.000000000000000000
PrintOptions.Printer = 'Por defecto'
+ PrintOptions.PrintOnSheet = 0
ReportOptions.CreateDate = 39065.872423495400000000
ReportOptions.LastChange = 39352.784043865700000000
ScriptLanguage = 'PascalScript'
@@ -802,29 +803,6 @@ object RptPedidosProveedor: TRptPedidosProveedor
OnStartReport = 'frxReportOnStartReport'
Left = 169
Top = 16
- Datasets = <
- item
- DataSet = frxDBCabecera
- DataSetName = 'frxDBCabecera'
- end
- item
- DataSet = frxDBDetalles
- DataSetName = 'frxDBDetalles'
- end>
- Variables = <
- item
- Name = ' Paginacion'
- Value = Null
- end
- item
- Name = 'TotalPaginas'
- Value = Null
- end
- item
- Name = 'Pagina'
- Value = Null
- end>
- Style = <>
end
object frxDBCabecera: TfrxDBDataset
UserName = 'frxDBCabecera'
@@ -840,4 +818,18 @@ object RptPedidosProveedor: TRptPedidosProveedor
Left = 344
Top = 16
end
+ object frxPDFExport1: TfrxPDFExport
+ ShowDialog = False
+ UseFileCache = True
+ ShowProgress = False
+ PrintOptimized = True
+ Outline = True
+ Author = 'FactuGES'
+ Subject = 'FactuGES'
+ Background = False
+ Creator = 'FactuGES'
+ HTMLTags = True
+ Left = 360
+ Top = 344
+ end
end
diff --git a/Source/Modulos/Pedidos a proveedor/Reports/uRptPedidosProveedor_Server.pas b/Source/Modulos/Pedidos a proveedor/Reports/uRptPedidosProveedor_Server.pas
index 8fea3a21..3c6a8075 100644
--- a/Source/Modulos/Pedidos a proveedor/Reports/uRptPedidosProveedor_Server.pas
+++ b/Source/Modulos/Pedidos a proveedor/Reports/uRptPedidosProveedor_Server.pas
@@ -7,7 +7,7 @@ uses
Dialogs, frxClass, frxDBSet, uDAScriptingProvider,
uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient,
frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes,
- uDAInterfaces;
+ uDAInterfaces, FactuGES_Intf, frxExportPDF;
type
TRptPedidosProveedor = class(TDataModule)
@@ -28,12 +28,14 @@ type
frxReport: TfrxReport;
schReport: TDASchema;
DataDictionary: TDADataDictionary;
+ frxPDFExport1: TfrxPDFExport;
procedure DataModuleCreate(Sender: TObject);
private
FConnection: IDAConnection;
- procedure GenerarPedido(const AID : Integer); overload;
+ procedure _GenerarPedido(const AID : Integer); overload;
public
function GenerarPedido(const AID : String): Binary; overload;
+ function GenerarReportEnPDF(const ListaID : TIntegerArray): Binary; //const AConLogotipo: Boolean = False): Binary;
end;
implementation
@@ -58,7 +60,7 @@ procedure TRptPedidosProveedor.DataModuleCreate(Sender: TObject);
begin
schReport.ConnectionManager := dmServer.ConnectionManager;
FConnection := dmServer.DarNuevaConexion;
- frxReport.EngineOptions.NewSilentMode := simReThrow;
+ frxReport.EngineOptions.NewSilentMode := simReThrow;
end;
function TRptPedidosProveedor.GenerarPedido(const AID: String): Binary;
@@ -68,30 +70,44 @@ var
begin
Result := Binary.Create;
- FConnection.BeginTransaction;
-
try
ID_Pedidos := TStringList.Create;
ID_Pedidos.CommaText := AID;
//Vamos generando todos y cada uno de los albaranes recibidos
for i := 0 to ID_Pedidos.Count - 1 do
- GenerarPedido(StrToInt(ID_Pedidos.Strings[i]));
+ _GenerarPedido(StrToInt(ID_Pedidos.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
-
finally
- FConnection.RollbackTransaction;
end;
end;
-procedure TRptPedidosProveedor.GenerarPedido(const AID: Integer);
+function TRptPedidosProveedor.GenerarReportEnPDF(const ListaID: TIntegerArray): Binary; //; const AConLogotipo: Boolean): Binary;
+var
+ i: Integer;
+begin
+// FShowLogotipo := AConLogotipo;
+ Result := Binary.Create;
+ try
+ //Vamos generando todos y cada uno de los presupuestos recibidos
+ for i := 0 to ListaID.Count - 1 do
+ _GenerarPedido(ListaID.Items[i]);
+
+ frxPDFExport1.Stream := Result;
+ frxReport.Export(frxPDFExport1)
+ finally
+ end;
+end;
+
+procedure TRptPedidosProveedor._GenerarPedido(const AID: Integer);
var
AStream: TMemoryStream;
dsMaster: IDADataset;
dsDetail: IDADataset;
begin
AStream := TMemoryStream.Create;
+ FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
dsMaster := schReport.NewDataset(FConnection, ds_InformeCabecera, ['ID'], [AID]);
@@ -109,6 +125,7 @@ begin
frxReport.PrepareReport(False);
finally
+ FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream.Free;
dsMaster := Nil;
dsDetail := Nil;
diff --git a/Source/Modulos/Pedidos a proveedor/Servidor/srvPedidosProveedor_Impl.pas b/Source/Modulos/Pedidos a proveedor/Servidor/srvPedidosProveedor_Impl.pas
index 3459de91..d988bc87 100644
--- a/Source/Modulos/Pedidos a proveedor/Servidor/srvPedidosProveedor_Impl.pas
+++ b/Source/Modulos/Pedidos a proveedor/Servidor/srvPedidosProveedor_Impl.pas
@@ -39,6 +39,7 @@ type
{ IsrvPedidosProveedor methods }
function GetNextAutoInc(const GeneratorName: String): Integer;
function GenerateReport(const ID: String): Binary;
+ function GenerarReportPDF(const ListaID: TIntegerArray; const ShowLogotipo: Boolean): Binary;
end;
implementation
@@ -84,6 +85,19 @@ begin
bpPedidosProveedor.BusinessRulesID := BIZ_SERVER_PEDIDOS_PROVEEDOR;
end;
+function TsrvPedidosProveedor.GenerarReportPDF(const ListaID: TIntegerArray;
+ const ShowLogotipo: Boolean): Binary;
+var
+ AReportGenerator : TRptPedidosProveedor;
+begin
+ AReportGenerator := TRptPedidosProveedor.Create(nil);
+ try
+ Result := AReportGenerator.GenerarReportEnPDF(ListaID); //, ShowLogotipo);
+ finally
+ FreeAndNIL(AReportGenerator);
+ end;
+end;
+
function TsrvPedidosProveedor.GenerateReport(const ID: String): Binary;
var
AReportGenerator : TRptPedidosProveedor;
diff --git a/Source/Modulos/Pedidos de cliente/Controller/PedidosCliente_controller.dpk b/Source/Modulos/Pedidos de cliente/Controller/PedidosCliente_controller.dpk
index 842fe2f7..d851fdc7 100644
--- a/Source/Modulos/Pedidos de cliente/Controller/PedidosCliente_controller.dpk
+++ b/Source/Modulos/Pedidos de cliente/Controller/PedidosCliente_controller.dpk
@@ -50,6 +50,7 @@ contains
uIEditorElegirArticulosPedidosCliente in 'View\uIEditorElegirArticulosPedidosCliente.pas',
uIEditorDireccionEntregaPedidoCliente in 'View\uIEditorDireccionEntregaPedidoCliente.pas',
uPedidosClienteReportController in 'uPedidosClienteReportController.pas',
- uIEditorPedidosClientePreview in 'View\uIEditorPedidosClientePreview.pas';
+ uIEditorPedidosClientePreview in 'View\uIEditorPedidosClientePreview.pas',
+ uIDialogListaPedidosCliEnvioEMail in 'View\uIDialogListaPedidosCliEnvioEMail.pas';
end.
diff --git a/Source/Modulos/Pedidos de cliente/Controller/View/uIDialogListaPedidosCliEnvioEMail.pas b/Source/Modulos/Pedidos de cliente/Controller/View/uIDialogListaPedidosCliEnvioEMail.pas
new file mode 100644
index 00000000..d4864089
--- /dev/null
+++ b/Source/Modulos/Pedidos de cliente/Controller/View/uIDialogListaPedidosCliEnvioEMail.pas
@@ -0,0 +1,21 @@
+unit uIDialogListaPedidosCliEnvioEMail;
+
+interface
+
+uses
+ uBizPedidosCliente, uPedidosClienteController;
+
+type
+ IDialogListaPedidosCliEnvioEMail = interface
+ ['{D51F7EC0-A75C-4BA9-9373-F1056F095B40}']
+ function GetPedidos: IBizPedidoCliente;
+ procedure SetPedidos(const Value: IBizPedidoCliente);
+ property Pedidos: IBizPedidoCliente read GetPedidos write SetPedidos;
+ function ShowModal : Integer;
+ procedure Release;
+ end;
+
+
+implementation
+
+end.
diff --git a/Source/Modulos/Pedidos de cliente/Controller/uPedidosClienteController.pas b/Source/Modulos/Pedidos de cliente/Controller/uPedidosClienteController.pas
index ad936afe..2dd674bb 100644
--- a/Source/Modulos/Pedidos de cliente/Controller/uPedidosClienteController.pas
+++ b/Source/Modulos/Pedidos de cliente/Controller/uPedidosClienteController.pas
@@ -52,6 +52,13 @@ type
procedure Preview(APedido : IBizPedidoCliente; AllItems: Boolean = false);
function Print(APedido : IBizPedidoCliente; AllItems: Boolean = false): Boolean;
+ function EnviarEmailPedidos(APedidos : IBizPedidoCliente): Boolean;
+ function GenerarEmailPedido(APedido : IBizPedidoCliente): Boolean;
+ function EnviarPedidoPorEMail(APedido: IBizPedidoCliente;
+ const AEnviarDirectamente: Boolean = True;
+ const ADireccionEMail: String = ''; const AAsuntoEMail: String = '';
+ const ATextoEMail: String = ''): Boolean;
+
function ArticulosPendientes(const ID : Integer): IBizPedidoClienteArticulosPend;
end;
@@ -116,6 +123,13 @@ type
procedure Preview(APedido : IBizPedidoCliente; AllItems: Boolean = false);
function Print(APedido : IBizPedidoCliente; AllItems: Boolean = false): Boolean;
+ function EnviarEmailPedidos(APedidos : IBizPedidoCliente): Boolean;
+ function GenerarEmailPedido(APedido : IBizPedidoCliente): Boolean;
+ function EnviarPedidoPorEMail(APedido: IBizPedidoCliente;
+ const AEnviarDirectamente: Boolean = True;
+ const ADireccionEMail: String = ''; const AAsuntoEMail: String = '';
+ const ATextoEMail: String = ''): Boolean;
+
function ArticulosPendientes(const ID : Integer): IBizPedidoClienteArticulosPend;
end;
@@ -127,7 +141,8 @@ uses
uBizContactos, uDataTableUtils, uDataModuleUsuarios, Classes,
schPedidosClienteClient_Intf, uDAInterfaces, uDateUtils, uIEditorPedidoCliente,
uIEditorElegirPedidosCliente, uIEditorDireccionEntregaPedidoCliente,
- schContactosClient_Intf, uPedidosClienteReportController;
+ schContactosClient_Intf, uPedidosClienteReportController, uIDialogListaPedidosCliEnvioEMail,
+ uSistemaFunc, uStringsUtils, uDialogElegirEMail, Forms, uEMailUtils;
{ TPedidosClienteController }
@@ -556,6 +571,98 @@ begin
end;
end;
+function TPedidosClienteController.EnviarEmailPedidos(APedidos: IBizPedidoCliente): Boolean;
+var
+ ADialog : IDialogListaPedidosCliEnvioEMail;
+ ARespuesta : Integer;
+begin
+ ADialog := NIL;
+
+ if not Assigned(APedidos) then
+ raise Exception.Create ('Facturas no asignadas (EnviarPedidosCliPorEMail)');
+
+ if APedidos.DataTable.Active then
+ APedidos.DataTable.Active := True;
+
+ ShowHourglassCursor;
+ try
+ CreateEditor('DialogListaPedidosCliEnvioEMail', IDialogListaPedidosCliEnvioEMail, ADialog);
+
+ if Assigned(ADialog) then
+ begin
+ try
+ ADialog.Pedidos := APedidos;
+ ARespuesta := ADialog.ShowModal;
+ Result := (ARespuesta = mrOK)
+ finally
+ ADialog.Release;
+ end;
+ end;
+ finally
+ ADialog := NIL;
+ HideHourglassCursor;
+ end;
+end;
+
+function TPedidosClienteController.EnviarPedidoPorEMail(
+ APedido: IBizPedidoCliente; const AEnviarDirectamente: Boolean;
+ const ADireccionEMail, AAsuntoEMail, ATextoEMail: String): Boolean;
+var
+ AReportController : IPedidosClienteReportController;
+ AFicheroTMP : TFileName;
+ AEMail : String;
+ AAsunto : String;
+ AListaEmail : TStringList;
+begin
+
+ if not Assigned(APedido) then
+ raise Exception.Create ('Pedido no asignada (EnviarFacturaPorEMail)');
+
+ if APedido.DataTable.Active then
+ APedido.DataTable.Active := True;
+
+ RecuperarCliente(APedido);
+ APedido.Cliente.DataTable.Active := True;
+
+ AFicheroTMP := DarFicheroPDFTemporal(EscapeIllegalChars(APedido.REFERENCIA));
+
+ if not EsCadenaVacia(ADireccionEMail) then
+ AEMail := ADireccionEMail
+ else begin
+ AListaEmail := TStringList.Create;
+ try
+ if not EsCadenaVacia(APedido.Cliente.EMAIL_ADMINISTRACION) then
+ AListaEmail.Add(APedido.Cliente.EMAIL_ADMINISTRACION);
+
+ if not ElegirEMail(AListaEmail, AEMail) then
+ Exit;
+ finally
+ FreeANDNIL(AListaEmail);
+ end;
+ end;
+
+ if not EsCadenaVacia(AAsuntoEMail) then
+ AAsunto := AAsuntoEMail
+ else
+ AAsunto := 'Pedido ' + APedido.REFERENCIA;
+
+ ShowHourglassCursor;
+ Application.ProcessMessages;
+
+ AReportController := TPedidosClienteReportController.Create;
+ try
+ AReportController.ExportToPDF(APedido.ID, AFicheroTMP);
+ Result := EnviarEMailMAPI(AAsunto, ATextoEMail, AFicheroTMP, '', '', APedido.Cliente.NOMBRE, AEMail, AEnviarDirectamente);
+ if Result then
+// _AnadirMarcaEnvioCorreo(APedido);
+ finally
+ SysUtils.DeleteFile(AFicheroTMP);
+ AReportController := NIL;
+ HideHourglassCursor;
+ Application.ProcessMessages;
+ end;
+end;
+
function TPedidosClienteController.EsEliminable(APedido: IBizPedidoCliente): Boolean;
begin
if not Assigned(APedido) then
@@ -850,6 +957,23 @@ begin
end;
end;
+function TPedidosClienteController.GenerarEmailPedido(APedido: IBizPedidoCliente): Boolean;
+begin
+ if not Assigned(APedido) then
+ raise Exception.Create ('Pedidos no asignadas (GenerarEmailPedido)');
+
+ if APedido.DataTable.Active then
+ APedido.DataTable.Active := True;
+
+ ShowHourglassCursor;
+ try
+ RecuperarCliente(APedido);
+ EnviarPedidoPorEMail(APedido, False, APedido.Cliente.EMAIL_ADMINISTRACION);
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
function TPedidosClienteController.GetClienteController: IClientesController;
begin
Result := FClienteController;
diff --git a/Source/Modulos/Pedidos de cliente/Controller/uPedidosClienteReportController.pas b/Source/Modulos/Pedidos de cliente/Controller/uPedidosClienteReportController.pas
index 859d3c62..768d2a0e 100644
--- a/Source/Modulos/Pedidos de cliente/Controller/uPedidosClienteReportController.pas
+++ b/Source/Modulos/Pedidos de cliente/Controller/uPedidosClienteReportController.pas
@@ -12,6 +12,7 @@ type
['{D0686358-251C-43C4-9927-6112F2F4D3B8}']
procedure Preview(const AID : String);
function Print(const AID : String): Boolean;
+ function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean;
end;
TPedidosClienteReportController = class(TInterfacedObject, IPedidosClienteReportController)
@@ -24,6 +25,7 @@ type
procedure Preview(const AID : String);
function Print(const AID : String): Boolean;
+ function ExportToPDF(const AID: Integer; const AFileName : String = ''): Boolean;
end;
@@ -32,7 +34,7 @@ implementation
uses
uROTypes, uEditorRegistryUtils, uIEditorPedidosClientePreview,
uEditorPreview, uDataModulePedidosCliente, uEditorBase, cxControls,
- schPedidosClienteClient_Intf;
+ schPedidosClienteClient_Intf, uStringsUtils;
{ TPedidosClienteReportController }
@@ -54,6 +56,29 @@ begin
inherited;
end;
+function TPedidosClienteReportController.ExportToPDF(const AID: Integer;
+ const AFileName: String): Boolean;
+var
+ AStream: Binary;
+begin
+ Result := False;
+ if EsCadenaVacia(AFileName) then
+ Exit;
+
+ ShowHourglassCursor;
+ try
+ AStream := FDataModule.GetRptPDF(AID, True);
+ try
+ AStream.SaveToFile(AFileName);
+ Result := True;
+ finally
+ FreeAndNil(AStream);
+ end;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
procedure TPedidosClienteReportController.Preview(const AID : String);
var
AStream: Binary;
diff --git a/Source/Modulos/Pedidos de cliente/Data/uDataModulePedidosCliente.pas b/Source/Modulos/Pedidos de cliente/Data/uDataModulePedidosCliente.pas
index a68f961a..fff0118c 100644
--- a/Source/Modulos/Pedidos de cliente/Data/uDataModulePedidosCliente.pas
+++ b/Source/Modulos/Pedidos de cliente/Data/uDataModulePedidosCliente.pas
@@ -45,8 +45,8 @@ type
function NewItem : IBizPedidoCliente;
// Report
-// function GetReport(const AID: String): Binary;
function GetReport(const AID: String; const ShowLogotipo: Boolean = False): Binary;
+ function GetRptPDF(const AID: Integer; const ShowLogotipo: Boolean = False): Binary;
end;
implementation
@@ -88,6 +88,20 @@ begin
Result := (RORemoteService as IsrvPedidosCliente).GenerateReport(AID, ShowLogotipo)
end;
+function TDataModulePedidosCliente.GetRptPDF(const AID: Integer;
+ const ShowLogotipo: Boolean): Binary;
+var
+ AParam : TIntegerArray;
+begin
+ AParam := TIntegerArray.Create;
+ try
+ AParam.Add(AID);
+ Result := (RORemoteService as IsrvPedidosCliente).GenerarReportPDF(AParam, ShowLogotipo)
+ finally
+ FreeANDNIL(AParam)
+ end;
+end;
+
function TDataModulePedidosCliente.NewItem: IBizPedidoCliente;
begin
Result := GetItem(ID_NULO)
diff --git a/Source/Modulos/Pedidos de cliente/Model/Data/uIDataModulePedidosClienteReport.pas b/Source/Modulos/Pedidos de cliente/Model/Data/uIDataModulePedidosClienteReport.pas
index caf4cc20..102267ea 100644
--- a/Source/Modulos/Pedidos de cliente/Model/Data/uIDataModulePedidosClienteReport.pas
+++ b/Source/Modulos/Pedidos de cliente/Model/Data/uIDataModulePedidosClienteReport.pas
@@ -9,6 +9,7 @@ type
IDataModulePedidosClienteReport = interface
['{70CEBB06-376F-4363-B80F-DDA4324E0F85}']
function GetReport(const AID: String; const ShowLogotipo: Boolean = False): Binary;
+ function GetRptPDF(const AID: Integer; const ShowLogotipo: Boolean = False): Binary;
end;
implementation
diff --git a/Source/Modulos/Pedidos de cliente/PedidosCliente_Group.bdsgroup b/Source/Modulos/Pedidos de cliente/PedidosCliente_Group.bdsgroup
index 83491870..56bf935f 100644
--- a/Source/Modulos/Pedidos de cliente/PedidosCliente_Group.bdsgroup
+++ b/Source/Modulos/Pedidos de cliente/PedidosCliente_Group.bdsgroup
@@ -8,7 +8,9 @@
-
+
+
+
..\..\Base\Base.bdsproj
..\..\Base\ControllerBase\ControllerBase.bdsproj
..\..\Base\GUIBase\GUIBase.bdsproj
@@ -23,7 +25,10 @@
Plugin\PedidosCliente_plugin.bdsproj
..\..\Servidor\FactuGES_Server.bdsproj
..\..\Cliente\FactuGES.bdsproj
- Base.bpl ControllerBase.bpl GUIBase.bpl Articulos_model.bpl Articulos_data.bpl Articulos_controller.bpl Articulos_view.bpl PedidosCliente_model.bpl PedidosCliente_data.bpl PedidosCliente_controller.bpl PedidosCliente_view.bpl PedidosCliente_plugin.bpl FactuGES_Server.exe FactuGES.exe
+ ..\Facturas de cliente\Views\FacturasCliente_view.bdsproj
+ ..\Facturas de cliente\Controller\FacturasCliente_controller.bdsproj
+ ..\Facturas de cliente\Data\FacturasCliente_data.bdsproj
+ Base.bpl ControllerBase.bpl GUIBase.bpl Articulos_model.bpl Articulos_data.bpl Articulos_controller.bpl Articulos_view.bpl PedidosCliente_model.bpl PedidosCliente_data.bpl PedidosCliente_controller.bpl PedidosCliente_view.bpl PedidosCliente_plugin.bpl FactuGES_Server.exe FactuGES.exe FacturasCliente_view.bpl FacturasCliente_controller.bpl FacturasCliente_data.bpl
diff --git a/Source/Modulos/Pedidos de cliente/Reports/uRptPedidosCliente_Server.dfm b/Source/Modulos/Pedidos de cliente/Reports/uRptPedidosCliente_Server.dfm
index d720a0c9..aebc8538 100644
--- a/Source/Modulos/Pedidos de cliente/Reports/uRptPedidosCliente_Server.dfm
+++ b/Source/Modulos/Pedidos de cliente/Reports/uRptPedidosCliente_Server.dfm
@@ -940,4 +940,18 @@ object RptPedidosCliente: TRptPedidosCliente
Left = 344
Top = 16
end
+ object frxPDFExport1: TfrxPDFExport
+ ShowDialog = False
+ UseFileCache = True
+ ShowProgress = False
+ PrintOptimized = True
+ Outline = True
+ Author = 'FactuGES'
+ Subject = 'FactuGES'
+ Background = False
+ Creator = 'FactuGES'
+ HTMLTags = True
+ Left = 360
+ Top = 344
+ end
end
diff --git a/Source/Modulos/Pedidos de cliente/Reports/uRptPedidosCliente_Server.pas b/Source/Modulos/Pedidos de cliente/Reports/uRptPedidosCliente_Server.pas
index 9c90c782..588d975f 100644
--- a/Source/Modulos/Pedidos de cliente/Reports/uRptPedidosCliente_Server.pas
+++ b/Source/Modulos/Pedidos de cliente/Reports/uRptPedidosCliente_Server.pas
@@ -7,7 +7,7 @@ uses
Dialogs, frxClass, frxDBSet, uDAScriptingProvider,
uDADataTable, uDACDSDataTable, DB, uDAClasses, frxChart, frxGradient,
frxChBox, frxCross, frxOLE, frxBarcode, frxRich, uDABINAdapter, uROTypes,
- uDAInterfaces;
+ uDAInterfaces, FactuGES_Intf, frxExportPDF;
type
TRptPedidosCliente = class(TDataModule)
@@ -28,14 +28,16 @@ type
schReport: TDASchema;
DataDictionary: TDADataDictionary;
frxReport: TfrxReport;
+ frxPDFExport1: TfrxPDFExport;
procedure DataModuleCreate(Sender: TObject);
procedure frxReportGetValue(const VarName: string; var Value: Variant);
private
FConnection: IDAConnection;
- FShowLogotipo: Boolean;
- procedure GenerarPedido(const AID : Integer); overload;
+ FShowLogotipo: Boolean;
+ procedure _GenerarPedido(const AID : Integer); overload;
public
function GenerarPedido(const AID : String; const AConLogotipo: Boolean = False): Binary; overload;
+ function GenerarReportEnPDF(const ListaID : TIntegerArray; const AConLogotipo: Boolean = False): Binary;
end;
implementation
@@ -70,8 +72,6 @@ var
begin
Result := Binary.Create;
- FConnection.BeginTransaction;
-
try
FShowLogotipo := AConLogotipo;
ID_Pedidos := TStringList.Create;
@@ -79,12 +79,28 @@ begin
//Vamos generando todos y cada uno de los albaranes recibidos
for i := 0 to ID_Pedidos.Count - 1 do
- GenerarPedido(StrToInt(ID_Pedidos.Strings[i]));
+ _GenerarPedido(StrToInt(ID_Pedidos.Strings[i]));
frxReport.PreviewPages.SaveToStream(Result);
-
finally
- FConnection.RollbackTransaction;
+ end;
+end;
+
+function TRptPedidosCliente.GenerarReportEnPDF(const ListaID: TIntegerArray;
+ const AConLogotipo: Boolean): Binary;
+var
+ i: Integer;
+begin
+ FShowLogotipo := AConLogotipo;
+ Result := Binary.Create;
+ try
+ //Vamos generando todos y cada uno de los presupuestos recibidos
+ for i := 0 to ListaID.Count - 1 do
+ _GenerarPedido(ListaID.Items[i]);
+
+ frxPDFExport1.Stream := Result;
+ frxReport.Export(frxPDFExport1)
+ finally
end;
end;
@@ -95,13 +111,14 @@ begin
Value := FShowLogotipo;
end;
-procedure TRptPedidosCliente.GenerarPedido(const AID: Integer);
+procedure TRptPedidosCliente._GenerarPedido(const AID: Integer);
var
AStream: TMemoryStream;
dsMaster: IDADataset;
dsDetail: IDADataset;
begin
AStream := TMemoryStream.Create;
+ FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
try
dsMaster := schReport.NewDataset(FConnection, ds_InformeCabecera, ['ID'], [AID]);
@@ -119,6 +136,7 @@ begin
frxReport.PrepareReport(False);
finally
+ FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
AStream.Free;
dsMaster := Nil;
dsDetail := Nil;
diff --git a/Source/Modulos/Pedidos de cliente/Servidor/srvPedidosCliente_Impl.pas b/Source/Modulos/Pedidos de cliente/Servidor/srvPedidosCliente_Impl.pas
index f37992f5..bfbf1d38 100644
--- a/Source/Modulos/Pedidos de cliente/Servidor/srvPedidosCliente_Impl.pas
+++ b/Source/Modulos/Pedidos de cliente/Servidor/srvPedidosCliente_Impl.pas
@@ -39,6 +39,7 @@ type
{ IsrvPedidosCliente methods }
function GetNextAutoInc(const GeneratorName: String): Integer;
function GenerateReport(const ID: String; const ShowLogotipo: Boolean): Binary;
+ function GenerarReportPDF(const ListaID: TIntegerArray; const ShowLogotipo: Boolean): Binary;
end;
implementation
@@ -81,6 +82,19 @@ begin
bpPedidosCliente.BusinessRulesID := BIZ_SERVER_PEDIDOS_CLIENTE;
end;
+function TsrvPedidosCliente.GenerarReportPDF(const ListaID: TIntegerArray;
+ const ShowLogotipo: Boolean): Binary;
+var
+ AReportGenerator : TRptPedidosCliente;
+begin
+ AReportGenerator := TRptPedidosCliente.Create(nil);
+ try
+ Result := AReportGenerator.GenerarReportEnPDF(ListaID, ShowLogotipo);
+ finally
+ FreeAndNIL(AReportGenerator);
+ end;
+end;
+
function TsrvPedidosCliente.GenerateReport(const ID: String; const ShowLogotipo: Boolean): Binary;
var
AReportGenerator : TRptPedidosCliente;
diff --git a/Source/Modulos/Pedidos de cliente/Views/PedidosCliente_view.bdsproj b/Source/Modulos/Pedidos de cliente/Views/PedidosCliente_view.bdsproj
index d24131f9..9ece3628 100644
--- a/Source/Modulos/Pedidos de cliente/Views/PedidosCliente_view.bdsproj
+++ b/Source/Modulos/Pedidos de cliente/Views/PedidosCliente_view.bdsproj
@@ -174,7 +174,7 @@
Intraweb 8.0 Design Package for Borland Development Studio 2006
-