Varela_PuntosVenta/Source/Modulos/ReferenciaGenerica/Cliente/uEditorCambioReferenciaGenerica.pas

315 lines
11 KiB
ObjectPascal

{*******************************************************}
{ }
{ Administración de puntos de venta }
{ }
{ Copyright (C) 2006 Rodax Software S.L. }
{ }
{*******************************************************}
unit uEditorCambioReferenciaGenerica;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uBizReferenciaGenerica, StdCtrls, JvExControls, JvComponent,
JvgWizardHeader, ExtCtrls, cxStyles, cxCustomData, cxGraphics, cxFilter,
cxData, cxDataStorage, cxEdit, DB, cxDBData, uDADataTable, cxGridLevel,
cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGrid, cxGridBandedTableView,
cxGridDBBandedTableView, cxCurrencyEdit, cxSpinEdit, cxButtonEdit,
cxTextEdit, cxEditRepositoryItems, uDAInterfaces;
type
IEditorCambioReferenciaGenerica = interface
['{11A66FAC-E782-43DE-A3E6-68473F351F43}']
function GetItems : IBizReferenciaGenerica;
procedure SetItems (const AValue : IBizReferenciaGenerica);
property Items : IBizReferenciaGenerica read GetItems write SetItems;
end;
TfEditorCambioReferenciaGenerica = class(TForm, IEditorCambioReferenciaGenerica)
bAceptar: TButton;
bCancelar: TButton;
JvgWizardHeader1: TJvgWizardHeader;
Bevel1: TBevel;
bComprobar: TButton;
dsDataSource: TDADataSource;
cxStyleRepository1: TcxStyleRepository;
cxStyleEditable: TcxStyle;
cxStyleNoEditable: TcxStyle;
cxStyleProductor: TcxStyle;
cxStyleNoEncontrado: TcxStyle;
cxGrid: TcxGrid;
cxGridView: TcxGridDBBandedTableView;
cxGridViewRecID: TcxGridDBBandedColumn;
cxGridViewNUMINF: TcxGridDBBandedColumn;
cxGridViewCLAVE1: TcxGridDBBandedColumn;
cxGridViewCLAVE2: TcxGridDBBandedColumn;
cxGridViewCLAVE3: TcxGridDBBandedColumn;
cxGridViewFECHA: TcxGridDBBandedColumn;
cxGridViewCODCENTRO: TcxGridDBBandedColumn;
cxGridViewCENTRO: TcxGridDBBandedColumn;
cxGridViewCODVENDEDOR: TcxGridDBBandedColumn;
cxGridViewVENDEDOR: TcxGridDBBandedColumn;
cxGridViewNUMTALON: TcxGridDBBandedColumn;
cxGridViewCODIGO_BARRA: TcxGridDBBandedColumn;
cxGridViewCODIGO: TcxGridDBBandedColumn;
cxGridViewPRODUCTO: TcxGridDBBandedColumn;
cxGridViewCOLOR: TcxGridDBBandedColumn;
cxGridViewTALLA: TcxGridDBBandedColumn;
cxGridViewVTAPROCESO: TcxGridDBBandedColumn;
cxGridViewVTAFINAL: TcxGridDBBandedColumn;
cxGridViewVTATERM: TcxGridDBBandedColumn;
cxGridViewVALTOT: TcxGridDBBandedColumn;
cxGridViewESTADO: TcxGridDBBandedColumn;
cxGridViewFECHACAMBIO: TcxGridDBBandedColumn;
cxGridLevel: TcxGridLevel;
lblImporteTotal: TLabel;
cxGridViewOperacion: TcxGridDBBandedColumn;
cxEditRepository1: TcxEditRepository;
cxEditButtonDesglosar: TcxEditRepositoryButtonItem;
cxEditButtonEliminarDesglose: TcxEditRepositoryButtonItem;
cxGridViewNUMCON: TcxGridDBBandedColumn;
procedure FormShow(Sender: TObject);
procedure cxGridViewCustomDrawCell(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
var ADone: Boolean);
procedure bComprobarClick(Sender: TObject);
procedure cxGridViewPRODUCTOStylesGetContentStyle(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
procedure bAceptarClick(Sender: TObject);
procedure cxGridViewOperacionGetProperties(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AProperties: TcxCustomEditProperties);
procedure cxEditButtonDesglosarPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure cxEditButtonEliminarDesglosePropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
private
FItems : IBizReferenciaGenerica;
FCodigoBarras : String;
FHayErrores : Boolean;
FItemsErroneos : Integer;
procedure DesglosarReferencia;
protected
function GetItems : IBizReferenciaGenerica;
procedure SetItems (const AValue : IBizReferenciaGenerica);
public
property Items : IBizReferenciaGenerica read GetItems write SetItems;
end;
implementation
uses
uEditorUtils, uDataModuleReferenciaGenerica,
schReferenciaGenericaClient_Intf, Math;
{$R *.dfm}
function ShowEditorCambioReferenciaGenerica (ABizObject : TDADataTableRules) : TModalResult;
var
AEditor: TfEditorCambioReferenciaGenerica;
begin
AEditor := TfEditorCambioReferenciaGenerica.Create(Application);
try
AEditor.Items := (ABizObject as IBizReferenciaGenerica);
Result := AEditor.ShowModal;
if Result = mrOk then
begin
{(ABizObject as IBizReferenciaGenerica).Edit;
(ABizObject as IBizReferenciaGenerica).CODIGO := AEditor.Codigo;
(ABizObject as IBizReferenciaGenerica).TALLA := AEditor.Talla;
(ABizObject as IBizReferenciaGenerica).COLOR := AEditor.Color;
(ABizObject as IBizReferenciaGenerica).CODIGO_BARRA := AEditor.CodigoBarras;
(ABizObject as IBizReferenciaGenerica).PRODUCTO := AEditor.Label3.Caption;
(ABizObject as IBizReferenciaGenerica).FECHACAMBIO := Now;
(ABizObject as IBizReferenciaGenerica).ESTADO := rgResuelto;
(ABizObject as IBizReferenciaGenerica).Post;
(ABizObject as IBizReferenciaGenerica).DataTable.ApplyUpdates;}
end;
{ if Result = mrIgnore then
begin
(ABizObject as IBizReferenciaGenerica).Delete;
(ABizObject as IBizReferenciaGenerica).DataTable.ApplyUpdates;
end;}
finally
AEditor.Release;
end;
end;
{ TfEditorCambioReferenciaGenerica }
procedure TfEditorCambioReferenciaGenerica.FormShow(Sender: TObject);
begin
FCodigoBarras := '';
FHayErrores := False;
FItemsErroneos := 0;
FItems.DataTable.Open;
cxGridView.DataController.GotoFirst;
end;
function TfEditorCambioReferenciaGenerica.GetItems: IBizReferenciaGenerica;
begin
Result := FItems;
end;
procedure TfEditorCambioReferenciaGenerica.SetItems(
const AValue: IBizReferenciaGenerica);
begin
FItems := AValue;
if Assigned(FItems) then
dsDataSource.DataTable := FItems.DataTable;
end;
procedure TfEditorCambioReferenciaGenerica.cxGridViewCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if VarToStrDef(AViewInfo.GridRecord.Values[cxGridViewNUMCON.Index], '0') <> '0' then
ACanvas.Brush.Color := clInfoBk;
if ((AViewInfo.Item as TcxGridDBBandedColumn).Position.RowIndex = 1) then
begin
ADone := True;
with AViewInfo do begin
ACanvas.FillRect(Bounds);
ACanvas.DrawTexT(Text, TextAreaBounds, 0);
if (AViewInfo.Item.Index = cxGridViewCOLOR.Index) or
(AViewInfo.Item.Index = cxGridViewTALLA.Index) or
(AViewInfo.Item.Index = cxGridViewCODIGO.Index) or
(AViewInfo.Item.Index = cxGridViewVALTOT.Index) then
ACanvas.FrameRect(Bounds, BorderColor[bBottom], 1, [bBottom, bTop, bLeft, bRight])
else
ACanvas.FrameRect(Bounds, BorderColor[bBottom], 1, [bBottom]);
end;
end
else
if (AViewInfo.Item.Index = cxGridViewVTAPROCESO.Index) or
(AViewInfo.Item.Index = cxGridViewVTAFINAL.Index) or
(AViewInfo.Item.Index = cxGridViewVTATERM.Index) then
begin
ADone := True;
with AViewInfo do
begin
ACanvas.FillRect(Bounds);
ACanvas.DrawTexT(Text, TextAreaBounds, 0);
ACanvas.FrameRect(Bounds, BorderColor[bBottom], 1, [bBottom, bTop, bLeft, bRight]);
end;
end;
end;
procedure TfEditorCambioReferenciaGenerica.bComprobarClick(
Sender: TObject);
var
Descripcion : String;
CodigoBarras : String;
bEncontrado : Boolean;
i : Integer;
ABookmark : Pointer;
begin
FHayErrores := False;
FItemsErroneos := 0;
FItems.DataTable.DisableControls;
ABookmark := FItems.DataTable.GetBookMark;
try
FItems.First;
for i := 0 to FItems.RecordCount - 1 do
begin
bEncontrado := dmReferenciaGenerica.GetProducto(FItems.CODIGO, FItems.TALLA,
FItems.COLOR, CodigoBarras, Descripcion);
FItems.Edit;
if bEncontrado and (Pos('ERROR REFERENCIA', Descripcion) = 0) then
begin
FItems.PRODUCTO := Descripcion;
FItems.CODIGO_BARRA := CodigoBarras;
FItems.Estado := rgResuelto;
FItems.FECHACAMBIO := Now;
end
else begin
FHayErrores := True;
FItemsErroneos := FItemsErroneos + 1;
FItems.PRODUCTO := '*** PRODUCTO NO ENCONTRADO ***';
end;
FItems.Post;
FItems.Next;
end;
finally
FItems.DataTable.EnableControls;
FItems.DataTable.GotoBookmark(ABookmark);
FItems.DataTable.FreeBookmark(ABookmark);
end;
end;
procedure TfEditorCambioReferenciaGenerica.cxGridViewPRODUCTOStylesGetContentStyle(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
begin
if ARecord.Values[AItem.Index] = '*** PRODUCTO NO ENCONTRADO ***' then
AStyle := cxStyleNoEncontrado;
end;
procedure TfEditorCambioReferenciaGenerica.bAceptarClick(Sender: TObject);
begin
bComprobar.Click;
if FHayErrores then
if (Application.MessageBox('Hay códigos de producto que no se han encontrado o son incorrectos.' + #10#13 +
'¿Desea guardar los cambios de solamente aquellos que están bien?', 'Atención', MB_YESNO) = IDNO) then
Exit;
// Adaptación a DA5
// Sólo guardar en el caso de que haya algún item correcto. Si todos están mal da una excepción el servidor
// porque no hay filas a actualizar.
if FItemsErroneos < FItems.DataTable.RecordCount then
FItems.DataTable.ApplyUpdates;
Close;
end;
procedure TfEditorCambioReferenciaGenerica.cxGridViewOperacionGetProperties(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AProperties: TcxCustomEditProperties);
begin
if Assigned(ARecord) then
begin
// Sólo aparecerá el botón '+' si alguna cantidad es mayor que 1
if (Abs(StrToIntDef(ARecord.DisplayTexts[cxGridViewVTAPROCESO.Index], 0)) > 1) or
(Abs(StrToIntDef(ARecord.DisplayTexts[cxGridViewVTAFINAL.Index], 0)) > 1) or
(Abs(StrToIntDef(ARecord.DisplayTexts[cxGridViewVTATERM.Index], 0)) > 1) then
AProperties := cxEditButtonDesglosar.Properties
else
if (StrToIntDef(ARecord.DisplayTexts[cxGridViewNUMCON.Index], 0) > 0) then
AProperties := cxEditButtonEliminarDesglose.Properties
end;
end;
procedure TfEditorCambioReferenciaGenerica.DesglosarReferencia;
begin
FItems.DesglosarReferencia;
end;
procedure TfEditorCambioReferenciaGenerica.cxEditButtonDesglosarPropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
DesglosarReferencia;
end;
procedure TfEditorCambioReferenciaGenerica.cxEditButtonEliminarDesglosePropertiesButtonClick(
Sender: TObject; AButtonIndex: Integer);
begin
FItems.Delete;
end;
initialization
RegisterEditor(IBizReferenciaGenerica, ShowEditorCambioReferenciaGenerica, etItem);
finalization
end.