AlonsoYSal_FactuGES2/Source/Modulos/Recibos de proveedor/Views/uViewRecibosProveedor.pas
2021-03-04 14:07:54 +00:00

285 lines
9.8 KiB
ObjectPascal

unit uViewRecibosProveedor;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uViewGrid, uViewPreview, cxStyles, cxCustomData, cxGraphics,
cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, dxPSGlbl, dxPSUtl,
dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider,
dxPSFillPatterns, dxPSEdgePatterns, cxImageComboBox, cxTextEdit, ImgList,
PngImageList, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
dxPSCore, dxPScxCommon, dxPScxGrid6Lnk, ActnList, uDADataTable,
cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid,
cxImage, Grids, DBGrids, uBizRecibosProveedor, cxGridCustomPopupMenu,
cxGridPopupMenu, cxCalendar, cxCurrencyEdit, uViewFiltroBase, TB2Item, TBX,
TB2Toolbar, TBXDkPanels, TB2Dock, dxPgsDlg, uDAInterfaces, uCustomView,
uViewBase;
type
IViewRecibosProveedor = interface(IViewGrid)
['{2E26DF6E-CFCD-41CC-AC4C-FCF3AD0AD0D7}']
function GetRecibos: IBizRecibosProveedor;
procedure SetRecibos(const Value: IBizRecibosProveedor);
property Recibos: IBizRecibosProveedor read GetRecibos write SetRecibos;
procedure FiltrarPorFechas(const Fecha1, Fecha2: Variant);
end;
TfrViewRecibosProveedor = class(TfrViewGrid, IViewRecibosProveedor)
PngImageList: TPngImageList;
cxStylePendientes: TcxStyle;
cxGridPendientes: TcxGridLevel;
cxGridPagados: TcxGridLevel;
cxStylePagadas: TcxStyle;
cxGridViewREFERENCIA: TcxGridDBColumn;
cxGridViewSITUACION: TcxGridDBColumn;
cxGridViewFECHA_VENCIMIENTO: TcxGridDBColumn;
cxGridViewDESCRIPCION: TcxGridDBColumn;
cxGridViewIMPORTE: TcxGridDBColumn;
cxGridViewNOMBRE_PROVEEDOR: TcxGridDBColumn;
cxGridViewNIF_CIF_PROVEEDOR: TcxGridDBColumn;
cxGridViewREFERENCIA_REMESA: TcxGridDBColumn;
cxGridDevueltos: TcxGridLevel;
cxGridViewOTROS_GASTOS: TcxGridDBColumn;
cxGridViewIMPORTE_TOTAL: TcxGridDBColumn;
cxGridViewFECHA_EMISION: TcxGridDBColumn;
cxStyleDevueltas: TcxStyle;
actProveedor: TAction;
TBXItem2: TTBXItem;
TBXSeparatorItem1: TTBXSeparatorItem;
cxGridViewREFERENCIA_FACTURA_PROV: TcxGridDBColumn;
cxGridViewID_RECIBO_COMPENSADO: TcxGridDBColumn;
cxGridViewREFERENCIA_REC_COMPENSADO: TcxGridDBColumn;
cxGridViewNOMBRE_COMERCIAL: TcxGridDBColumn;
cxGridViewFECHA_PAGO: TcxGridDBColumn;
cxGridViewSUBCUENTA: TcxGridDBColumn;
procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView;
ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
out AStyle: TcxStyle);
procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel);
procedure cxGridViewIMPORTE_TOTALGetDisplayText(Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: string);
procedure actProveedorExecute(Sender: TObject);
procedure actProveedorUpdate(Sender: TObject);
procedure cxGridViewID_RECIBO_COMPENSADOCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
private
//Filtros relativos a la vista
procedure AnadirFiltroSituaciones;
procedure AnadirFiltroFechas;
protected
FRecibos: IBizRecibosProveedor;
function GetRecibos: IBizRecibosProveedor;
procedure SetRecibos(const Value: IBizRecibosProveedor);
procedure AnadirOtrosFiltros; override;
public
property Recibos: IBizRecibosProveedor read GetRecibos write SetRecibos;
procedure FiltrarPorFechas(const Fecha1, Fecha2: Variant);
end;
implementation
uses
schRecibosProveedorClient_Intf, uDataModuleRecibosProveedor, DateUtils, uViewGridBase;
{$R *.dfm}
{ TfrViewRecibosProveedor }
procedure TfrViewRecibosProveedor.actProveedorExecute(Sender: TObject);
begin
inherited;
if (cxGridViewNOMBRE_PROVEEDOR.GroupIndex < 0) then
begin
cxGridViewNOMBRE_PROVEEDOR.GroupIndex := cxGridView.GroupedColumnCount;
cxGridViewNOMBRE_PROVEEDOR.Visible := False;
end
else
begin
cxGridViewNOMBRE_PROVEEDOR.GroupIndex := -1;
cxGridViewNOMBRE_PROVEEDOR.Visible := True;
end;
end;
procedure TfrViewRecibosProveedor.actProveedorUpdate(Sender: TObject);
begin
inherited;
(Sender as TAction).Checked := not (cxGridViewNOMBRE_PROVEEDOR.GroupIndex < 0);
end;
procedure TfrViewRecibosProveedor.AnadirFiltroFechas;
var
Columna: TcxGridDBColumn;
Fecha1, Fecha2: Variant;
FechaVencimiento1, FechaVencimiento2: Variant;
FFiltro : TcxFilterCriteriaItemList;
begin
Fecha1 := frViewFiltroBase1.edtFechaIniFiltro.EditValue;
Fecha2 := frViewFiltroBase1.edtFechaFinFiltro.EditValue;
FechaVencimiento1 := frViewFiltroBase1.edtFecha2IniFiltro.EditValue;
FechaVencimiento2 := frViewFiltroBase1.edtFecha2FinFiltro.EditValue;
if not VarIsNull(Fecha1)
and not VarIsNull(Fecha2) then
begin
cxGridView.DataController.Filter.Options := [fcoCaseInsensitive, fcoSoftCompare];
FFiltro := AddFilterGrid(fboAnd);
Columna := (cxGridView as TcxGridDBTableView).GetColumnByFieldName(fld_RecibosCompensadosProvFECHA_EMISION);
FFiltro.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2));
end;
if not VarIsNull(FechaVencimiento1)
and not VarIsNull(FechaVencimiento2) then
begin
cxGridView.DataController.Filter.Options := [fcoCaseInsensitive, fcoSoftCompare];
FFiltro := AddFilterGrid(fboAnd);
Columna := (cxGridView as TcxGridDBTableView).GetColumnByFieldName(fld_RecibosCompensadosProvFECHA_VENCIMIENTO);
FFiltro.AddItem(Columna, foBetween, varArrayOf([FechaVencimiento1, FechaVencimiento2]), VarToStr(FechaVencimiento1) + ' and ' + VarToStr(FechaVencimiento2));
end;
end;
procedure TfrViewRecibosProveedor.AnadirFiltroSituaciones;
var
FFiltro : TcxFilterCriteriaItemList;
begin
FFiltro := AddFilterGrid(fboAnd);
case cxGrid.ActiveLevel.Index of
1 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, CTE_PENDIENTE, CTE_PENDIENTE);
2 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, CTE_PAGADO, CTE_PAGADO);
3 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, CTE_DEVUELTO, CTE_DEVUELTO);
end;
end;
procedure TfrViewRecibosProveedor.AnadirOtrosFiltros;
begin
inherited;
AnadirFiltroSituaciones;
AnadirFiltroFechas;
//Finalmente activamos el filtro si tenemos algo
if cxGridView.DataController.Filter.IsEmpty
then cxGridView.DataController.Filter.Active := False
else cxGridView.DataController.Filter.Active := True;
cxGrid.ActiveLevel.GridView := cxGridView;
end;
procedure TfrViewRecibosProveedor.cxGridActiveTabChanged(Sender: TcxCustomGrid;
ALevel: TcxGridLevel);
begin
inherited;
RefrescarFiltro;
end;
procedure TfrViewRecibosProveedor.cxGridViewID_RECIBO_COMPENSADOCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
R : TRect;
begin
inherited;
if not VarIsNull(AViewInfo.Value) then
begin
R := AViewInfo.ContentBounds;
ACanvas.FillRect(R);
ACanvas.DrawImage(PngImageList, R.Left, R.Top, 2);
ADone := True;
end;
end;
procedure TfrViewRecibosProveedor.cxGridViewIMPORTE_TOTALGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: string);
var
ImporteTotal : Double;
begin
//Se encarga de mostrar el campo calculado de importe total
ImporteTotal := -1;
if not VarIsNull(ARecord.Values[cxGridViewIMPORTE.Index]) then
if not VarIsNull(ARecord.Values[cxGridViewOTROS_GASTOS.Index]) then
ImporteTotal := ARecord.Values[cxGridViewIMPORTE.Index] + ARecord.Values[cxGridViewOTROS_GASTOS.Index]
else
ImporteTotal := ARecord.Values[cxGridViewIMPORTE.Index];
if (ImporteTotal <> -1) then
begin
AText := FormatCurr(',0.00 €;-,0.00 €', FloatToCurr(ImporteTotal));
ARecord.Values[cxGridViewIMPORTE_TOTAL.Index] := ImporteTotal;
cxGridViewIMPORTE_TOTAL.EditValue := ImporteTotal;
cxGridViewIMPORTE_TOTAL.DataBinding.Field.Value := ImporteTotal;
end;
end;
procedure TfrViewRecibosProveedor.cxGridViewStylesGetContentStyle(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
var
IndiceCol: Integer;
ASituacion: string;
begin
inherited;
if Assigned(ARecord) then
begin
IndiceCol := cxGridViewSITUACION.Index;
ASituacion := UPPERCASE(VarToStr(ARecord.DisplayTexts[IndiceCol]));
if (ASituacion = CTE_PENDIENTE) then
AStyle := cxStylePendientes
else if (ASituacion = CTE_PAGADO) then
AStyle := cxStylePagadas
else if (ASituacion = CTE_DEVUELTO) then
AStyle := cxStyleDevueltas;
end;
end;
procedure TfrViewRecibosProveedor.FiltrarPorFechas(const Fecha1, Fecha2: Variant);
var
Columna: TcxGridDBColumn;
begin
with cxGridView.DataController.Filter do
begin
BeginUpdate;
try
Options := [fcoCaseInsensitive, fcoSoftCompare];
Root.Clear;
if not VarIsNull(Fecha1)
and not VarIsNull(Fecha2) then
begin
Columna := (cxGridView as TcxGridDBTableView).GetColumnByFieldName(fld_RecibosCompensadosProvFECHA_VENCIMIENTO);
Root.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2));
Active := True;
end
else
Active := False;
finally
EndUpdate;
end;
end;
end;
function TfrViewRecibosProveedor.GetRecibos: IBizRecibosProveedor;
begin
Result := FRecibos;
end;
procedure TfrViewRecibosProveedor.SetRecibos(const Value: IBizRecibosProveedor);
begin
FRecibos := Value;
if Assigned(FRecibos) then
dsDataSource.DataTable := FRecibos.DataTable;
end;
end.