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_FactuGES/Source/Modulos/Informe margen por articulo/Views/uViewInfMargenArticuloGrid.pas

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.