This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
LuisLeon_FactuGES2/Source/Modulos/Informe margen por articulo/Data/uDataModuleInfMargenArticulo.pas

218 lines
8.2 KiB
ObjectPascal

unit uDataModuleInfMargenArticulo;
interface
uses {vcl:} SysUtils, Classes, DB, DBClient,
{RemObjects:} uDADataTable, uDABINAdapter,
uRORemoteService, uROClient, uROBinMessage,
uROWinInetHttpChannel, uDAScriptingProvider, uDACDSDataTable,
uBizInfMargenArticulo, uIDataModuleInfMargenArticulo, uDADesigntimeCall,
uDataModuleBase, uDARemoteDataAdapter, uDADataStreamer, uDABin2DataStreamer,
uDAInterfaces, uDAMemDataTable, uRODynamicRequest, JvComponentBase, JvLogFile;
//uBizControlVentasTerminadas,
//const
// CATEGORIA_VENTA_TERMINADA = 'VENTATERMINADA';
type
TdmInfMargenArticulo = class(TDataModuleBase, IDataModuleInfMargenArticulo)
RORemoteService: TRORemoteService;
DADesigntimeCall1: TDADesigntimeCall;
LoginRemoteService: TRORemoteService;
ROWinInetHTTPChannel1: TROWinInetHTTPChannel;
ROBinMessage1: TROBinMessage;
tbl_InfMargen: TDAMemDataTable;
tbl_InfMargenPorArticulo1: TDAMemDataTable;
ds_InfMargenPorArticulo1: TDADataSource;
tbl_InfMargenPorCliente1: TDAMemDataTable;
ds_InfMargenPorCliente1: TDADataSource;
tbl_InfMargenPorFactura1: TDAMemDataTable;
ds_InfMargenPorFactura1: TDADataSource;
Bin2DataStreamer: TDABin2DataStreamer;
rda_InfMargenPorArticulo: TDARemoteDataAdapter;
rda_InfMargenPorCliente: TDARemoteDataAdapter;
rda_InfMargenPorFactura: TDARemoteDataAdapter;
rda_TablaVacia: TDARemoteDataAdapter;
tbl_TablaVacia: TDAMemDataTable;
ds_TablaVacia: TDADataSource;
JvLogFile1: TJvLogFile;
procedure DAClientDataModuleCreate(Sender: TObject);
private
procedure InitRDA(var aDataTable: TDAMemDataTable; const SQLFROM: AnsiString; const AWhere: String; Agrupado: TEnumAgrupaciones; aIncludeSchema: Boolean; AMaxRecords: integer);
public
function GetItems(const AColumns: String; const AWhere: String; Agrupado: TEnumAgrupaciones) : IBizInfMargenArticulo;
function GetNameColumns(Agrupado: TEnumAgrupaciones): String;
end;
var
dmInfMargenArticulo: TdmInfMargenArticulo;
implementation
{$R *.DFM}
uses
Controls, Forms, uDataTableUtils,
uROTypes, Dialogs, uDataModuleConexion, uFactuGES_App,
cxControls, FactuGES_Intf, StrUtils, udmBase,
schInfMargenArticuloClient_Intf; //, uEditorPreview, uDataModuleControles, uDBSelectionList,
const
CAMPOS_AVG1 = '#IMP_NETO_ULT_VENT#IMP_NETO_PRO_VENT#IMP_PORTE_PRO_VENT#IMP_NETO_COMPRA#IMP_NETO_ULT_COMP#IMP_NETO_PRO_COMP#IMP_UNIDAD_PRO_COMP#IMP_PORTE_PRO_COMP#IMP_MARGEN_ULT_VENT_COMPRA#POR_MARGEN_ULT_VENT_COMPRA#IMP_MARGEN_ULT_VENT_ULT_COMP#';
CAMPOS_AVG2 = '#POR_MARGEN_ULT_VENT_ULT_COMP#IMP_MARGEN_ULT_VENT_PRO_COMP#POR_MARGEN_ULT_VENT_PRO_COMP#IMP_MARGEN_PRO_VENT_COMPRA#POR_MARGEN_PRO_VENT_COMPRA#IMP_MARGEN_PRO_VENT_ULT_COMP#POR_MARGEN_PRO_VENT_ULT_COMP#IMP_MARGEN_PRO_VENT_PRO_COMP#';
CAMPOS_AVG3 = '#POR_MARGEN_PRO_VENT_PRO_COMP#IMP_UNIDAD_PRO_VENT#';
//SOLO PARA INFORME AGRUPADO POR FACTURA PARA SACAR BENEFICIO REAL
CTE_DATA_NAME = 'InfMargenPorFactura';
CAMPOS_SUMA = '#CANTIDAD#IMP_UNIDAD#IMP_NETO#IMP_PORTE#IMP_TOTAL#IMP_NETO_ULT_COM_TOTAL#IMP_NETO_PRO_COM_TOTAL#IMP_MARGEN_ULT_COMP_TOTAL#IMP_MARGEN_PRO_COMP_TOTAL#';
procedure TdmInfMargenArticulo.DAClientDataModuleCreate(Sender: TObject);
begin
RORemoteService.Channel := dmConexion.Channel;
RORemoteService.Message := dmConexion.Message;
end;
function TdmInfMargenArticulo.GetItems(const AColumns: String; const AWhere: String; Agrupado: TEnumAgrupaciones): IBizInfMargenArticulo;
var
AInfMargenArticulo : TDAMemDataTable;
ASQL: AnsiString;
begin
ShowHourglassCursor;
try
AInfMargenArticulo := CloneDataTable(tbl_TablaVacia);
AInfMargenArticulo.BusinessRulesID := BIZ_InfMargenArticulo;
(AInfMargenArticulo as IBizInfMargenArticulo).VisibleColumns := AColumns;
Case Agrupado of
tCliente: begin
AInfMargenArticulo.LogicalName := 'InfMargenPorCliente';
ASQL := (RORemoteService as IsrvInfMargenArticulo).GetSQLFROM('InfMargenPorCliente');
end;
tArticulo:begin
AInfMargenArticulo.LogicalName := 'InfMargenPorArticulo';
ASQL := (RORemoteService as IsrvInfMargenArticulo).GetSQLFROM('InfMargenPorArticulo');
end;
tFactura: begin
AInfMargenArticulo.LogicalName := 'InfMargenPorFactura';
ASQL := (RORemoteService as IsrvInfMargenArticulo).GetSQLFROM('InfMargenPorFactura');
end;
End;
InitRDA(AInfMargenArticulo, ASQL, Awhere, Agrupado, True, 0);
AInfMargenArticulo.Close;
Result := (AInfMargenArticulo as IBizInfMargenArticulo);
finally
HideHourglassCursor;
end;
{
ShowHourglassCursor;
try
Case Agrupado of
tCliente: begin
tbl_InfMargen.LogicalName := 'InfMargenPorCliente';
tbl_InfMargen.SchemaCall.ParamByName('DatasetName').AsString := 'InfMargenPorCliente';
tbl_InfMargen.DataRequestCall.ParamByName('DatasetName').AsString := 'InfMargenPorCliente';
end;
tArticulo:begin
tbl_InfMargen.LogicalName := 'InfMargenPorArticulo';
tbl_InfMargen.SchemaCall.ParamByName('DatasetName').AsString := 'InfMargenPorArticulo';
tbl_InfMargen.DataRequestCall.ParamByName('DatasetName').AsString := 'InfMargenPorArticulo';
end;
tFactura: begin
tbl_InfMargen.LogicalName := 'InfMargenPorFactura';
tbl_InfMargen.SchemaCall.ParamByName('DatasetName').AsString := 'InfMargenPorFactura';
tbl_InfMargen.DataRequestCall.ParamByName('DatasetName').AsString := 'InfMargenPorFactura';
end;
End;
}
// AInfMargenArticulo := _CloneDataTable(tbl_InfMargen);
// AInfMargenArticulo.Fields.AssignFieldCollection(tbl_InfMargenPorCliente1.Fields); //Siempre por cliente
// AInfMargenArticulo.BusinessRulesID := BIZ_InfMargenArticulo;
// AInfMargenArticulo.LoadSchema;
// Result := (AInfMargenArticulo as IBizInfMargenArticulo);
// finally
// HideHourglassCursor;
// end;
end;
function TdmInfMargenArticulo.GetNameColumns(Agrupado: TEnumAgrupaciones): String;
var
AList : TStringList;
i : integer;
begin
AList := TStringList.Create;
try
case Agrupado of
tCliente: begin
for i := 0 to tbl_InfMargenPorCliente1.FieldCount - 1 do
if tbl_InfMargenPorCliente1.Fields[i].Visible then
AList.Add(tbl_InfMargenPorCliente1.Fields[i].Name);
end;
tArticulo:begin
for i := 0 to tbl_InfMargenPorArticulo1.FieldCount - 1 do
if tbl_InfMargenPorArticulo1.Fields[i].Visible then
AList.Add(tbl_InfMargenPorArticulo1.Fields[i].Name);
end;
tFactura: begin
for i := 0 to tbl_InfMargenPorFactura1.FieldCount - 1 do
if tbl_InfMargenPorFactura1.Fields[i].Visible then
AList.Add(tbl_InfMargenPorFactura1.Fields[i].Name);
end;
end;
Result := AList.CommaText;
finally
FreeAndNil(AList);
end;
end;
procedure TdmInfMargenArticulo.InitRDA(var aDataTable: TDAMemDataTable;
const SQLFROM: AnsiString; const AWhere: String; Agrupado: TEnumAgrupaciones;
aIncludeSchema: Boolean; AMaxRecords: integer);
var
ASql: String;
begin
with tbl_TablaVacia do begin
Close;
with TReplicarDataSet.Create do
begin
FROM_SQL := 'FROM (' + ReplaceStr(SQLFROM,':FECHAINI AND :FECHAFIN', AWhere) + ') ' + 'where (' + fld_InfMargenPorClienteID_EMPRESA + ' = ' + IntToStr(AppFactuGES.EmpresaActiva.ID) + ')';
Columnas := (aDataTable as IBizInfMargenArticulo).VisibleColumns;
if aDataTable.LogicalName = CTE_DATA_NAME then
ColumnasQueSuman := CAMPOS_SUMA
else
ColumnasQueSuman := '';
ColumnasQueAVG := CAMPOS_AVG1 + CAMPOS_AVG2 + CAMPOS_AVG3;
try
ASql := GenerateNewSQL;
dmBase.EscribirLog(ASql);
finally
Free;
end;
end;
rda_TablaVacia.GetDataCall.ParamByName('aSQLText').AsString := ASql;
MaxRecords := AMaxRecords;
rda_TablaVacia.Fill([tbl_TablaVacia], true, aIncludeSchema);
end;
end;
end.