unit uViewDetallesArticulos; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewDetallesDTO, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxImageComboBox, cxRichEdit, cxMaskEdit, cxCurrencyEdit, cxCheckBox, ImgList, PngImageList, uDADataTable, StdActns, ExtActns, ActnList, TB2Item, TBX, TB2Dock, TB2Toolbar, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid, ComCtrls, StdCtrls, JvExStdCtrls, JvCombobox, JvColorCombo, ToolWin, uControllerDetallesArticulos, cxTextEdit, uDAInterfaces, cxDropDownEdit, cxButtonEdit, Menus, cxGridCustomPopupMenu, cxGridPopupMenu, cxEditRepositoryItems; type IViewDetallesArticulos = interface(IViewDetallesDTO) ['{D2F72E72-9CEA-4E43-AA18-625F7561E627}'] end; TfrViewDetallesArticulos = class(TfrViewDetallesDTO, IViewDetallesArticulos) cxGridViewID_ARTICULO: TcxGridDBColumn; cxGridViewREFERENCIA: TcxGridDBColumn; cxGridViewREFERENCIA_PROVEEDOR: TcxGridDBColumn; actAnadirArticulos: TAction; cxGridViewUNIDAD_MEDIDA: TcxGridDBColumn; actBuscarArticulo: TAction; TBXSeparatorItem8: TTBXSeparatorItem; cxGridViewREFERENCIA_FABRICANTE: TcxGridDBColumn; cxEditRepository1: TcxEditRepository; cxEditRepositoryComboBox_IMPORTEUNIDAD: TcxEditRepositoryComboBoxItem; cxEditRepositoryCurrencyItem_IMPORTEUNIDAD: TcxEditRepositoryCurrencyItem; procedure CustomViewCreate(Sender: TObject); procedure CustomViewDestroy(Sender: TObject); procedure actAnadirArticulosExecute(Sender: TObject); procedure actAnadirArticulosUpdate(Sender: TObject); procedure OnValidateReferencia(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure OnValidateReferenciaProveedor(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure CustomViewShow(Sender: TObject); procedure cxGridViewREFERENCIAPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure actBuscarArticuloExecute(Sender: TObject); procedure actBuscarArticuloUpdate(Sender: TObject); procedure actDetalleCopiarExecute(Sender: TObject); procedure actDetallePegarExecute(Sender: TObject); procedure actDetalleCortarExecute(Sender: TObject); procedure cxGridViewREFERENCIA_PROVEEDORPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); procedure cxGridViewREFERENCIA_FABRICANTEPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); private procedure RecuperarListaUnidadesMedida; protected procedure AnadirArticulosInterno; virtual; procedure RellenarArticulosInterno; virtual; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; virtual; function EsTipoEditable(AItem: TcxCustomGridTableItem): Boolean; override; end; implementation {$R *.dfm} uses uCalculosUtils, uViewDetallesBase, uControllerDetallesBase, uUnidadesMedidaController; procedure TfrViewDetallesArticulos.actAnadirArticulosExecute(Sender: TObject); begin cxGridView.BeginUpdate; try if cxGridView.Controller.EditingController.IsEditing then cxGridView.Controller.EditingController.Edit.PostEditValue; AnadirArticulosInterno; finally cxGridView.EndUpdate; end; SeleccionarFilaActual; end; procedure TfrViewDetallesArticulos.AnadirArticulosInterno; begin (Controller as IControllerDetallesArticulos).AnadirArticulos(Detalles); end; procedure TfrViewDetallesArticulos.CustomViewCreate(Sender: TObject); begin inherited; cxGridViewREFERENCIA.Properties.OnValidate := OnValidateReferencia; cxGridViewREFERENCIA_PROVEEDOR.Properties.OnValidate := OnValidateReferenciaProveedor; end; procedure TfrViewDetallesArticulos.CustomViewDestroy(Sender: TObject); begin inherited; cxGridViewREFERENCIA.Properties.OnValidate := Nil; cxGridViewREFERENCIA_PROVEEDOR.Properties.OnValidate := Nil; end; procedure TfrViewDetallesArticulos.CustomViewShow(Sender: TObject); begin inherited; { with DADataSource.DataTable do begin cxGridView.BeginUpdate; try if Assigned(FindField('UNIDAD_MEDIDA')) then begin cxGridViewUNIDAD_MEDIDA.DataBinding.FieldName := 'UNIDAD_MEDIDA'; cxGridViewUNIDAD_MEDIDA.Visible := True; cxGridViewUNIDAD_MEDIDA.VisibleForCustomization := True; RecuperarListaUnidadesMedida; end else begin cxGridViewUNIDAD_MEDIDA.DataBinding.FieldName := ''; cxGridViewUNIDAD_MEDIDA.Visible := False; cxGridViewUNIDAD_MEDIDA.VisibleForCustomization := False; end; if Assigned(FindField('REFERENCIA_FABRICANTE')) then begin cxGridViewREFERENCIA_FABRICANTE.DataBinding.FieldName := 'REFERENCIA_FABRICANTE'; cxGridViewREFERENCIA_FABRICANTE.Visible := True; cxGridViewREFERENCIA_FABRICANTE.VisibleForCustomization := True; end else begin cxGridViewREFERENCIA_FABRICANTE.DataBinding.FieldName := ''; cxGridViewREFERENCIA_FABRICANTE.Visible := False; cxGridViewREFERENCIA_FABRICANTE.VisibleForCustomization := False; end; finally cxGridView.EndUpdate; end; end; } SeleccionarFilaActual; end; procedure TfrViewDetallesArticulos.cxGridViewREFERENCIAPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin inherited; actBuscarArticulo.Execute; end; procedure TfrViewDetallesArticulos.cxGridViewREFERENCIA_FABRICANTEPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin inherited; actBuscarArticulo.Execute; end; procedure TfrViewDetallesArticulos.cxGridViewREFERENCIA_PROVEEDORPropertiesButtonClick( Sender: TObject; AButtonIndex: Integer); begin inherited; actBuscarArticulo.Execute; end; function TfrViewDetallesArticulos.EsTipoEditable( AItem: TcxCustomGridTableItem): Boolean; var IndiceCol : Integer; begin Result := True; if (AItem.Index in [cxGridViewREFERENCIA.Index, cxGridViewREFERENCIA_PROVEEDOR.Index]) then begin IndiceCol := cxGridView.GetColumnByFieldName(CAMPO_TIPO).Index; if ((AItem.GridView.Items[IndiceCol].EditValue = TIPO_DETALLE_SALTO) or (AItem.GridView.Items[IndiceCol].EditValue = TIPO_DETALLE_SUBTOTAL) or (AItem.GridView.Items[IndiceCol].EditValue = TIPO_DETALLE_DESCUENTO) or (AItem.GridView.Items[IndiceCol].EditValue = TIPO_DETALLE_TITULO)) then Result := False; end else Result := inherited EsTipoEditable(AItem); end; procedure TfrViewDetallesArticulos.OnValidateReferencia(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var lsReferencia : String; begin //En el caso de cadena vacia no validamos if (VarIsNull(DisplayValue)) then Exit; lsReferencia := VarToStr(DisplayValue); if (length(trim(lsReferencia)) = 0) then Exit; if not AnadirArticulo(lsReferencia, tCliente) then begin ErrorText := 'La referencia introducida no exite en el catálogo'; Error := True; end; end; procedure TfrViewDetallesArticulos.OnValidateReferenciaProveedor(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var lsReferencia : String; begin //En el caso de cadena vacia no validamos if (VarIsNull(DisplayValue)) then Exit; lsReferencia := VarToStr(DisplayValue); if (length(trim(lsReferencia)) = 0) then Exit; if not AnadirArticulo(lsReferencia, tProveedor) then begin ErrorText := 'La referencia introducida no exite en el catálogo'; Error := True; end; end; procedure TfrViewDetallesArticulos.RecuperarListaUnidadesMedida; var AUnidController : IUnidadesMedidaController; begin inherited; with TcxComboBoxProperties(cxGridViewUNIDAD_MEDIDA.Properties).Items do begin if (Count = 0) then begin ShowHourglassCursor; BeginUpdate; AUnidController := TUnidadesMedidaController.Create; try Clear; AddStrings(AUnidController.DarListaUnidadesMedida); finally EndUpdate; AUnidController := NIL; HideHourglassCursor; end; end; end; end; procedure TfrViewDetallesArticulos.RellenarArticulosInterno; begin (Controller as IControllerDetallesArticulos).AnadirArticulos(Detalles, False); end; procedure TfrViewDetallesArticulos.actAnadirArticulosUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := actAnadir.Enabled; end; procedure TfrViewDetallesArticulos.actBuscarArticuloExecute(Sender: TObject); begin cxGridView.BeginUpdate; try if cxGridView.Controller.EditingController.IsEditing then cxGridView.Controller.EditingController.Edit.PostEditValue; RellenarArticulosInterno; finally cxGridView.EndUpdate; end; SeleccionarFilaActual; end; procedure TfrViewDetallesArticulos.actBuscarArticuloUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := actAnadir.Enabled; end; procedure TfrViewDetallesArticulos.actDetalleCopiarExecute(Sender: TObject); begin inherited; cxGridView.CopyToClipboard(False); end; procedure TfrViewDetallesArticulos.actDetalleCortarExecute(Sender: TObject); begin inherited; // end; procedure TfrViewDetallesArticulos.actDetallePegarExecute(Sender: TObject); begin inherited; // end; function TfrViewDetallesArticulos.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; begin Result := (Controller as IControllerDetallesArticulos).AnadirArticulo(Detalles, pReferencia, TipoReferencia); end; end.