git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES/trunk@307 c93665c3-c93d-084d-9b98-7d5f4a9c3376
365 lines
12 KiB
ObjectPascal
365 lines
12 KiB
ObjectPascal
unit uViewInfMargenArticuloGrid;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, uViewInformeBaseGrid, DB, uDADataTable, cxStyles, cxCustomData,
|
|
cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData,
|
|
cxTextEdit, cxGridLevel, cxGridCustomTableView, cxGridTableView,
|
|
cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid,
|
|
cxCurrencyEdit, cxCalendar, dxPSGlbl, dxPSUtl, dxPrnPg, dxBkgnd, dxWrap,
|
|
dxPrnDev, dxPSEngn, dxPSCompsProvider, dxPSFillPatterns,
|
|
dxPSEdgePatterns, dxPSCore, dxPScxCommon, dxPScxGrid6Lnk, dxPgsDlg,
|
|
cxDropDownEdit, StdCtrls, cxSpinEdit, cxMaskEdit, cxCalc;
|
|
|
|
type
|
|
IViewInfMargenArticuloGrid = interface(IViewInformeBaseGrid)
|
|
['{19EAFDBF-857D-4A6B-851A-DDB7A3CB281B}']
|
|
end;
|
|
|
|
TfrViewInfMargenArticuloGrid = class(TfrViewInformeBaseGrid, IViewInfMargenArticuloGrid)
|
|
cxGrid: TcxGrid;
|
|
cxGridView: TcxGridDBTableView;
|
|
cxGridLevel: TcxGridLevel;
|
|
cxStyleRepository1: TcxStyleRepository;
|
|
cxStyleRed: TcxStyle;
|
|
cxStyleBlue: TcxStyle;
|
|
cxStyleFilterBox: TcxStyle;
|
|
cxGridViewRecID: TcxGridDBColumn;
|
|
cxGridViewID_EMPRESA: TcxGridDBColumn;
|
|
cxGridViewID_CLIENTE: TcxGridDBColumn;
|
|
cxGridViewID_ARTICULO: TcxGridDBColumn;
|
|
cxGridViewFAMILIA: TcxGridDBColumn;
|
|
cxGridViewREFERENCIA: TcxGridDBColumn;
|
|
cxGridViewREFERENCIA_PROV: TcxGridDBColumn;
|
|
cxGridViewDESCRIPCION: TcxGridDBColumn;
|
|
cxGridViewCOMISIONABLE: TcxGridDBColumn;
|
|
cxGridViewINVENTARIABLE: TcxGridDBColumn;
|
|
cxGridViewIMP_UNIDAD_COMPRA: TcxGridDBColumn;
|
|
cxGridViewIMP_NETO_COMPRA: TcxGridDBColumn;
|
|
cxGridViewIMP_PORTE_COMPRA: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_ULT_VENT_COMPRA: TcxGridDBColumn;
|
|
cxGridViewPOR_MARGEN_ULT_VENT_COMPRA: TcxGridDBColumn;
|
|
cxGridViewPOR_MARGEN_ULT_VENT_ULT_COMP: TcxGridDBColumn;
|
|
cxGridViewNIF_CIF_CLIENTE: TcxGridDBColumn;
|
|
cxGridViewNOMBRE_CLIENTE: TcxGridDBColumn;
|
|
cxGridViewNOMBRE_COMERCIAL_CLIENTE: TcxGridDBColumn;
|
|
cxGridViewNIF_CIF_AGENTE: TcxGridDBColumn;
|
|
cxGridViewNOMBRE_AGENTE: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_PRO_VENT_PRO_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_ULT_VENT_ULT_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_UNIDAD_ULT_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_NETO_ULT_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_PORTE_ULT_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_UNIDAD_PRO_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_NETO_PRO_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_PORTE_PRO_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_ULT_VENT_PRO_COMP: TcxGridDBColumn;
|
|
cxGridViewPOR_MARGEN_ULT_VENT_PRO_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_PRO_VENT_COMPRA: TcxGridDBColumn;
|
|
cxGridViewPOR_MARGEN_PRO_VENT_COMPRA: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_PRO_VENT_ULT_COMP: TcxGridDBColumn;
|
|
cxGridViewPOR_MARGEN_PRO_VENT_ULT_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_UNIDAD_ULT_VENT: TcxGridDBColumn;
|
|
cxGridViewIMP_NETO_ULT_VENT: TcxGridDBColumn;
|
|
cxGridViewIMP_PORTE_ULT_VENT: TcxGridDBColumn;
|
|
cxGridViewIMP_UNIDAD_PRO_VENT: TcxGridDBColumn;
|
|
cxGridViewIMP_NETO_PRO_VENT: TcxGridDBColumn;
|
|
cxGridViewIMP_PORTE_PRO_VENT: TcxGridDBColumn;
|
|
cxGridViewPOR_MARGEN_PRO_VENT_PRO_COMP: TcxGridDBColumn;
|
|
cxGridViewID_FACTURA: TcxGridDBColumn;
|
|
cxGridViewREFERENCIA_FACTURA: TcxGridDBColumn;
|
|
cxGridViewFECHA_FACTURA: TcxGridDBColumn;
|
|
cxGridViewIMP_UNIDAD: TcxGridDBColumn;
|
|
cxGridViewIMP_NETO: TcxGridDBColumn;
|
|
cxGridViewIMP_PORTE: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_ULT_COMP: TcxGridDBColumn;
|
|
cxGridViewPOR_MARGEN_ULT_COMP: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_PRO_COMP: TcxGridDBColumn;
|
|
cxGridViewPOR_MARGEN_PRO_COMP: TcxGridDBColumn;
|
|
cxGridViewID_DETALLE: TcxGridDBColumn;
|
|
cxGridViewCANTIDAD: TcxGridDBColumn;
|
|
cxGridViewIMP_TOTAL: TcxGridDBColumn;
|
|
cxGridViewIMP_NETO_ULT_COM_TOTAL: TcxGridDBColumn;
|
|
cxGridViewIMP_NETO_PRO_COM_TOTAL: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_ULT_COMP_TOTAL: TcxGridDBColumn;
|
|
cxGridViewIMP_MARGEN_PRO_COMP_TOTAL: TcxGridDBColumn;
|
|
cxGridViewPROVEEDOR: TcxGridDBColumn;
|
|
procedure cxGridViewStylesGetContentStyle(
|
|
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
|
|
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
|
|
procedure cxGridViewColumnPosChanged(Sender: TcxGridTableView;
|
|
AColumn: TcxGridColumn);
|
|
procedure cxGridViewColumnSizeChanged(Sender: TcxGridTableView;
|
|
AColumn: TcxGridColumn);
|
|
procedure cxGridViewDataControllerGroupingChanged(Sender: TObject);
|
|
procedure cxGridViewDataControllerSortingChanged(Sender: TObject);
|
|
procedure cxGridViewDataControllerFilterChanged(Sender: TObject);
|
|
procedure cxGridViewDataControllerSummaryFooterSummaryItemsSummary(
|
|
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
|
|
var OutArguments: TcxSummaryEventOutArguments);
|
|
procedure cxGridViewDataControllerSummaryAfterSummary(
|
|
ASender: TcxDataSummary);
|
|
protected
|
|
procedure ActivarEventos; override;
|
|
procedure DesactivarEventos; override;
|
|
function GetFocusedView : TcxGridDBTableView; override;
|
|
public
|
|
procedure Refresh; override;
|
|
constructor Create(AOwner: TComponent); override;
|
|
function HayColumnasDePromedio: boolean;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
cxVariants, uDateUtils, cxGridDBDataDefinitions;
|
|
|
|
{$R *.dfm}
|
|
|
|
{ TfrInfMargenArticuloGrid }
|
|
|
|
function TfrViewInfMargenArticuloGrid.GetFocusedView: TcxGridDBTableView;
|
|
begin
|
|
Result := cxGridView;
|
|
end;
|
|
|
|
function TfrViewInfMargenArticuloGrid.HayColumnasDePromedio: boolean;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
Result := False;
|
|
|
|
//Para que el usuario pueda ocultar y desocultar columnas sin afectar al informe
|
|
for i := 0 to FocusedView.ColumnCount - 1 do
|
|
begin
|
|
if (FocusedView.Columns[i].Visible)
|
|
and (Pos('_PRO_', FocusedView.Columns[i].DataBinding.FieldName) <> 0) then
|
|
begin
|
|
Result := true;
|
|
break;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.Refresh;
|
|
var
|
|
FocusedRow, TopRow, i : Integer;
|
|
begin
|
|
inherited;
|
|
{ Refrescar las filas del grid a partir del dataset y colocar la fila
|
|
seleccionada donde estaba }
|
|
if FocusedView.DataController.DataSource.DataSet.State = dsBrowse then
|
|
begin
|
|
TopRow := FocusedView.Controller.TopRowIndex;
|
|
FocusedRow := FocusedView.DataController.FocusedRowIndex;
|
|
|
|
FocusedView.DataController.UpdateItems(False); // <- Refresco
|
|
|
|
FocusedView.DataController.FocusedRowIndex := FocusedRow;
|
|
FocusedView.Controller.TopRowIndex := TopRow;
|
|
|
|
//Para que el usuario pueda ocultar y desocultar columnas sin afectar al informe
|
|
for i := 0 to FocusedView.ColumnCount - 1 do
|
|
FocusedView.Columns[i].Hidden := not FocusedView.Columns[i].Visible;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.cxGridViewStylesGetContentStyle(
|
|
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
|
|
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
|
|
var
|
|
AColumn : TcxGridDBColumn;
|
|
AFecha : TDateTime;
|
|
begin
|
|
inherited;
|
|
|
|
// La fila es la cabecera de un grupo
|
|
{ if ARecord.Expandable then
|
|
Exit;
|
|
|
|
AColumn := FocusedView.GetColumnByFieldName('FECHA');
|
|
if Assigned(AColumn) and (AColumn.Visible) then
|
|
begin
|
|
try
|
|
AFecha := VarToDateTime(ARecord.Values[AColumn.Index]);
|
|
except
|
|
on Exception do
|
|
ShowMessage(VarToStr(ARecord.Values[AColumn.Index]));
|
|
end;
|
|
|
|
if DaysBetween(Now, AFecha) > 14 then
|
|
AStyle := cxStyleRed
|
|
else
|
|
if DaysBetween(Now, AFecha) > 7 then
|
|
AStyle := cxStyleBlue
|
|
end; }
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.cxGridViewColumnPosChanged(
|
|
Sender: TcxGridTableView; AColumn: TcxGridColumn);
|
|
begin
|
|
inherited;
|
|
if Assigned(FOnViewChanged) then
|
|
FOnViewChanged(Self);
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.cxGridViewColumnSizeChanged(
|
|
Sender: TcxGridTableView; AColumn: TcxGridColumn);
|
|
begin
|
|
inherited;
|
|
if Assigned(FOnViewChanged) then
|
|
FOnViewChanged(Self);
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerGroupingChanged(
|
|
Sender: TObject);
|
|
begin
|
|
inherited;
|
|
if Assigned(FOnViewChanged) then
|
|
FOnViewChanged(Self);
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerSortingChanged(
|
|
Sender: TObject);
|
|
begin
|
|
inherited;
|
|
if Assigned(FOnViewChanged) then
|
|
FOnViewChanged(Self);
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerSummaryAfterSummary(
|
|
ASender: TcxDataSummary);
|
|
|
|
procedure CalcGropSummaries;
|
|
|
|
function Groups: TcxDataControllerGroups;
|
|
begin
|
|
Result := cxGridView.DataController.Groups;
|
|
end;
|
|
|
|
procedure CalcGroupSummary(ADataGroupIndex: Integer);
|
|
var
|
|
V1, V2, AResult: Variant;
|
|
ASummaryItems: TcxDataSummaryItems;
|
|
begin
|
|
ASummaryItems := ASender.GroupSummaryItems[Groups.Level[ADataGroupIndex]];
|
|
|
|
V1 := ASender.GroupSummaryValues[ADataGroupIndex,
|
|
ASummaryItems.IndexOfItemLink(cxGridViewIMP_TOTAL)];
|
|
|
|
V2 := ASender.GroupSummaryValues[ADataGroupIndex,
|
|
ASummaryItems.IndexOfItemLink(cxGridViewIMP_MARGEN_PRO_COMP_TOTAL)];
|
|
|
|
AResult := 0;
|
|
|
|
if (V1 > 0) then
|
|
begin
|
|
AResult := (V2 * 100) / V1;
|
|
end;
|
|
|
|
ASender.GroupSummaryValues[ADataGroupIndex,
|
|
ASummaryItems.IndexOfItemLink(cxGridViewPOR_MARGEN_PRO_COMP)] := AResult
|
|
end;
|
|
|
|
procedure CalcGroupSummariesByDataGroupIndex(ADataGroupIndex: Integer);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
if Groups.Level[ADataGroupIndex] >= Groups.GroupingItemCount - 1 then
|
|
Exit;
|
|
for I := 0 to Groups.ChildCount[ADataGroupIndex] - 1 do
|
|
begin
|
|
CalcGroupSummary(Groups.ChildDataGroupIndex[ADataGroupIndex, I]);
|
|
CalcGroupSummariesByDataGroupIndex(Groups.ChildDataGroupIndex[ADataGroupIndex, I]);
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
CalcGroupSummariesByDataGroupIndex(-1);
|
|
end;
|
|
|
|
begin
|
|
if ASender.DataController.RecordCount > 0 then
|
|
begin
|
|
DesactivarEventos;
|
|
try
|
|
CalcGropSummaries;
|
|
finally
|
|
ActivarEventos;
|
|
if Assigned(FOnViewChanged) then
|
|
FOnViewChanged(Self);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerSummaryFooterSummaryItemsSummary(
|
|
ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
|
|
var OutArguments: TcxSummaryEventOutArguments);
|
|
var
|
|
AIndex: Integer;
|
|
ACalculo: Currency;
|
|
begin
|
|
inherited;
|
|
if Arguments.SummaryItem.ItemLink = cxGridViewPOR_MARGEN_PRO_COMP then
|
|
begin
|
|
if cxGridViewIMP_TOTAL.Visible
|
|
and cxGridViewIMP_MARGEN_PRO_COMP_TOTAL.Visible then
|
|
begin
|
|
ACalculo := 0;
|
|
AIndex := ASender.IndexOfItemLink(cxGridViewIMP_MARGEN_PRO_COMP_TOTAL);
|
|
if not VarIsNull(cxGridView.DataController.Summary.FooterSummaryValues[AIndex]) then
|
|
ACalculo := cxGridView.DataController.Summary.FooterSummaryValues[AIndex] * 100;
|
|
AIndex := ASender.IndexOfItemLink(cxGridViewIMP_TOTAL);
|
|
if not VarIsNull(cxGridView.DataController.Summary.FooterSummaryValues[AIndex]) then
|
|
ACalculo := ACalculo / cxGridView.DataController.Summary.FooterSummaryValues[AIndex];
|
|
|
|
OutArguments.Value := ACalculo;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.cxGridViewDataControllerFilterChanged(
|
|
Sender: TObject);
|
|
begin
|
|
if Assigned(FOnFilterChanged) then
|
|
FOnFilterChanged(Self);
|
|
end;
|
|
|
|
constructor TfrViewInfMargenArticuloGrid.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.ActivarEventos;
|
|
begin
|
|
inherited;
|
|
with cxGridView do
|
|
begin
|
|
DataController.Filter.OnChanged := cxGridViewDataControllerFilterChanged;
|
|
DataController.Summary.OnAfterSummary := cxGridViewDataControllerSummaryAfterSummary;
|
|
DataController.OnGroupingChanged := cxGridViewDataControllerGroupingChanged;
|
|
DataController.OnSortingChanged := cxGridViewDataControllerSortingChanged;
|
|
OnColumnPosChanged := cxGridViewColumnPosChanged;
|
|
OnColumnSizeChanged := cxGridViewColumnSizeChanged;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrViewInfMargenArticuloGrid.DesactivarEventos;
|
|
begin
|
|
inherited;
|
|
with cxGridView do
|
|
begin
|
|
DataController.Filter.OnChanged := nil;
|
|
DataController.Summary.OnAfterSummary := nil;
|
|
DataController.OnGroupingChanged := nil;
|
|
DataController.OnSortingChanged := nil;
|
|
OnColumnPosChanged := nil;
|
|
OnColumnSizeChanged := nil;
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|