Tecsitel_FactuGES2/Source/Modulos/Presupuestos de cliente/Data/uDataModulePresupuestosCliente.pas
2014-02-18 22:41:52 +00:00

250 lines
7.3 KiB
ObjectPascal

unit uDataModulePresupuestosCliente;
interface
uses
DB, Classes, SysUtils, uDADesigntimeCall,
uRORemoteService, uROClient, uROBinMessage, uDAScriptingProvider,
uDACDSDataTable, uROWinInetHttpChannel, uDADataTable, uDABINAdapter,
uROTypes,
uIDataModulePresupuestosCliente, uBizPresupuestosCliente, uBizDetallesPresupuestoCliente,
uIDataModulePresupuestosClienteReport, uDataModuleBase, uDAInterfaces,
uRODynamicRequest, uDADataStreamer, uDARemoteDataAdapter, uDABin2DataStreamer,
uDAMemDataTable, uIntegerListUtils;
type
TDataModulePresupuestosCliente = class(TDataModuleBase, IDataModulePresupuestosCliente, IDataModulePresupuestosClienteReport)
RORemoteService: TRORemoteService;
Bin2DataStreamer: TDABin2DataStreamer;
rda_PresupuestosCliente: TDARemoteDataAdapter;
tbl_PresupuestosCliente: TDAMemDataTable;
ds_PresupuestosCliente: TDADataSource;
tbl_PresupuestosCliente_Detalles: TDAMemDataTable;
ds_PresupuestosCliente_Detalles: TDADataSource;
RORemoteService1: TRORemoteService;
tbl_ListaAnosPresupuestos: TDAMemDataTable;
ds_ListaAnosPresupuestos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
private
function _GetDetalles : IBizDetallesPresupuestoCliente;
protected
procedure AsignarClaseNegocio(APresupuesto: TDADataTable);
public
function GetItems : IBizPresupuestoCliente; overload;
function GetItems(const AListaID: TIntegerList) : IBizPresupuestoCliente; overload;
function GetItem(const ID : Integer) : IBizPresupuestoCliente;
function NewItem : IBizPresupuestoCliente;
// Report
function GetRptPresupuestos(const AListaID: TIntegerList; Const AVerSello: Integer): Binary;
function GetRptWordPresupuesto(const AID: Integer; Const AVerSello: Integer): Binary;
function GetRptWordCertificadoTrabajos(const AID: Integer): Binary;
function GetRptPDFPresupuesto(const AID: Integer; Const AVerSello: Integer): Binary;
function GetAnosItems : TStringList;
end;
implementation
{$R *.DFM}
uses
cxControls, FactuGES_Intf, uDataModuleConexion, Dialogs, DataAbstract4_Intf,
uDataTableUtils, schPresupuestosClienteClient_Intf, uBizContactos;
{ TdmPresupuestosCliente }
procedure TDataModulePresupuestosCliente.AsignarClaseNegocio(APresupuesto: TDADataTable);
begin
APresupuesto.BusinessRulesID := BIZ_CLIENT_PRESUPUESTO_CLIENTE;
end;
procedure TDataModulePresupuestosCliente.DAClientDataModuleCreate(Sender: TObject);
begin
RORemoteService.Channel := dmConexion.Channel;
RORemoteService.Message := dmConexion.Message;
end;
function TDataModulePresupuestosCliente.GetRptPDFPresupuesto(const AID: Integer; Const AVerSello: Integer): Binary;
var
AParam : TIntegerArray;
begin
AParam := TIntegerArray.Create;
try
AParam.Add(AID);
Result := (RORemoteService as IsrvPresupuestosCliente).GenerarInformeEnPDF(AParam, AVerSello)
finally
FreeANDNIL(AParam)
end;
end;
function TDataModulePresupuestosCliente.GetRptPresupuestos(const AListaID: TIntegerList; Const AVerSello: Integer): Binary;
var
AParam : TIntegerArray;
begin
AParam := AListaID.ToIntegerArray;
try
Result := (RORemoteService as IsrvPresupuestosCliente).GenerarInforme(AParam, AVerSello)
finally
FreeANDNIL(AParam)
end;
end;
function TDataModulePresupuestosCliente.GetRptWordCertificadoTrabajos(
const AID: Integer): Binary;
begin
Result := (RORemoteService as IsrvPresupuestosCliente).GenerarCertificadoTrabajosEnWord(AID)
end;
function TDataModulePresupuestosCliente.GetRptWordPresupuesto(const AID: Integer; Const AVerSello: Integer): Binary;
begin
Result := (RORemoteService as IsrvPresupuestosCliente).GenerarInformeEnWord(AID, AVerSello)
end;
function TDataModulePresupuestosCliente.NewItem: IBizPresupuestoCliente;
begin
Result := GetItem(ID_NULO)
end;
{
function TDataModulePresupuestosCliente.SubirFichero(const ID: Integer; const NombreFichero: String; const Fichero: Binary): Boolean;
begin
Result := False;
try
Result := (RORemoteService1 as IsrvGestorDocumentos).SubirFichero(TRdxAlmacenes_Presupuestos, ID, NombreFichero, Fichero);
finally
//
end;
end;
}
function TDataModulePresupuestosCliente._GetDetalles: IBizDetallesPresupuestoCliente;
var
ADetalles : TDAMemDataTable;
begin
ShowHourglassCursor;
try
ADetalles := CloneDataTable(tbl_PresupuestosCliente_Detalles);
with ADetalles do
begin
BusinessRulesID := BIZ_CLIENT_DETALLES_PRESUPUESTO_CLIENTE;
DetailOptions := DetailOptions - [dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates];
end;
Result := (ADetalles as IBizDetallesPresupuestoCliente);
finally
HideHourglassCursor;
end;
end;
function TDataModulePresupuestosCliente.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosPresupuestos 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;
function TDataModulePresupuestosCliente.GetItem(const ID: Integer): IBizPresupuestoCliente;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
Result := Self.GetItems;
with Result.DataTable.DynamicWhere do
begin
// (ID = :ID)
Condicion := NewBinaryExpression(NewField('', fld_PresupuestosClienteID), NewConstant(ID, datInteger), dboEqual);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
end;
finally
HideHourglassCursor;
end;
end;
function TDataModulePresupuestosCliente.GetItems(
const AListaID: TIntegerList): IBizPresupuestoCliente;
var
Condicion: TDAWhereExpression;
i : Integer;
AArray : Array of TDAWhereExpression;
begin
if not Assigned(AListaID) then
raise Exception.Create('ListaID no asignada (GetItems)');
ShowHourglassCursor;
try
Result := Self.GetItems;
with Result.DataTable.DynamicWhere do
begin
// (ID in (1, 2, 3...)
SetLength(AArray, AListaID.Count);
for i := 0 to AListaID.Count - 1 do
AArray[i] := NewConstant(AListaID[i], datInteger);
Condicion := NewBinaryExpression(NewField('', fld_PresupuestosClienteID), NewList(AArray), dboIn);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
end;
finally
HideHourglassCursor;
end;
end;
function TDataModulePresupuestosCliente.GetItems: IBizPresupuestoCliente;
var
APresupuesto: TDAMemDataTable;
begin
ShowHourglassCursor;
try
APresupuesto := CloneDataTable(tbl_PresupuestosCliente);
AsignarClaseNegocio(APresupuesto);
// EL CAMPO REFERENCIA TIENEN QUE SER AUTOREFRESH!!!!!
APresupuesto.FieldByName(fld_PresupuestosClienteREFERENCIA).ServerAutoRefresh := TRUE;
with TBizPresupuestoCliente(APresupuesto.BusinessEventsObj) do
Detalles := _GetDetalles;
Result := (APresupuesto as IBizPresupuestoCliente);
finally
HideHourglassCursor;
end;
end;
end.