FactuGES2/Source/Modulos/Presupuestos de cliente/Views/uViewDetallesPresupuestoCliente.pas
roberto c7d80d66b7 Se arregla el editorgridbase para que su getmodified siempre devuelva false y asi no salga la pregunta desea guardar los cambios.
Tambien se modifica viewfiltrobase para que herede de viewbase en lugar de tframe.
Se arreglan las remesas de cliente y proveedor para que la lista de recibos a añadir en la remesa no aparezcan los que ya estén añadidos (ya que todo esta en memosria y hasta que no se guarde no pasa a bd y no se sabe que tiene o no tiene la remesa)

git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES2/trunk@426 f4e31baf-9722-1c47-927c-6f952f962d4b
2009-07-09 09:23:03 +00:00

274 lines
10 KiB
ObjectPascal
Raw Blame History

unit uViewDetallesPresupuestoCliente;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uViewDetallesArticulos, cxStyles, cxCustomData, cxGraphics, cxFilter,
cxData, cxDataStorage, cxEdit, DB, cxDBData, ImgList, PngImageList,
uDADataTable, ActnList, ComCtrls, ToolWin, cxGridLevel, cxClasses, cxControls,
cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
cxGrid, cxImageComboBox, cxTextEdit, cxMaskEdit, cxCheckBox, cxCurrencyEdit,
Grids, DBGrids, StdCtrls, ExtCtrls, cxRichEdit, ExtActns, StdActns,
JvExStdCtrls, JvCombobox, JvColorCombo, TB2Item, TBX, TB2Dock, TB2Toolbar,
uControllerDetallesArticulos, uBizPresupuestosCliente, uDAInterfaces, Buttons,
Mask, DBCtrls, cxButtonEdit, cxDropDownEdit, Menus, cxGridCustomPopupMenu,
cxGridPopupMenu, cxDBLookupComboBox, cxCalc, cxEditRepositoryItems,
cxContainer, cxLookupEdit, cxDBLookupEdit, uBizDetallesPresupuestoCliente,
cxMemo;
type
IViewDetallesPresupuestoCliente = interface(IViewDetallesArticulos)
['{3AF39FF4-291E-4E87-AF9A-93C240A744CD}']
function GetPresupuesto: IBizPresupuestoCliente;
procedure SetPresupuesto(const Value: IBizPresupuestoCliente);
property Presupuesto: IBizPresupuestoCliente read GetPresupuesto write SetPresupuesto;
end;
TfrViewDetallesPresupuestoCliente = class(TfrViewDetallesArticulos, IViewDetallesPresupuestoCliente)
actAsignarDescuento: TAction;
TBXItem18: TTBXItem;
TBXSeparatorItem9: TTBXSeparatorItem;
DAPropiedades: TDADataSource;
cxGridViewID_PROPIEDAD: TcxGridDBColumn;
cxLookupComboBox1: TcxLookupComboBox;
DAValores: TDADataSource;
cxRichEdit1: TcxRichEdit;
cxGridViewTIPO_ARTICULO: TcxGridDBColumn;
TBXSubmenuItem1: TTBXSubmenuItem;
TBXSeparatorItem6: TTBXSeparatorItem;
TBXItem14: TTBXItem;
actCapituloCocina: TAction;
actCapituloArmarioF: TAction;
actCapituloBano: TAction;
TBXItem15: TTBXItem;
TBXItem16: TTBXItem;
actCapituloArmarioI: TAction;
TBXItem17: TTBXItem;
actCapituloElectrodomesticos: TAction;
actCapituloVarios: TAction;
TBXItem19: TTBXItem;
TBXItem20: TTBXItem;
procedure actAsignarDescuentoExecute(Sender: TObject);
procedure actAsignarDescuentoUpdate(Sender: TObject);
procedure CustomViewShow(Sender: TObject);
procedure cxGridViewDESCRIPCIONGetPropertiesForEdit(Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AProperties: TcxCustomEditProperties);
procedure actCapituloBanoExecute(Sender: TObject);
procedure actCapituloArmarioFExecute(Sender: TObject);
procedure actCapituloArmarioIExecute(Sender: TObject);
procedure actCapituloCocinaExecute(Sender: TObject);
procedure actCapituloElectrodomesticosExecute(Sender: TObject);
procedure actCapituloVariosExecute(Sender: TObject);
private
procedure AnadirCapitulo(const Tipo: String);
protected
FPresupuesto: IBizPresupuestoCliente;
FPropiedades: IBizPropiedades;
function GetPresupuesto: IBizPresupuestoCliente;
procedure SetPresupuesto(const Value: IBizPresupuestoCliente);
procedure AnadirArticulosInterno; override;
procedure RellenarArticulosInterno; override;
function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override;
function EsTipoEditable(AItem: TcxCustomGridTableItem): Boolean; override;
public
property Presupuesto: IBizPresupuestoCliente read GetPresupuesto write SetPresupuesto;
end;
implementation
{$R *.dfm}
uses uControllerDetallesBase, uDetallesPresupuestoClienteController, schPresupuestosClienteClient_Intf,
uCalculosUtils;
{ TfrViewDetallesPresupuestoProveedor }
procedure TfrViewDetallesPresupuestoCliente.actAsignarDescuentoExecute(Sender: TObject);
var
AuxTop, AuxRow:Integer;
ADescuento: Variant;
begin
{
ADescuento := (Controller as IDetallesPresupuestoClienteController).PedirDescuento;
ShowHourglassCursor;
_FocusedView.BeginUpdate;
try
if Assigned(Controller) and Assigned(FPresupuesto.Detalles) then
begin
AuxTop := cxGridView.Controller.TopRowIndex;
AuxRow := cxGridView.DataController.FocusedRowIndex;
(Controller as IDetallesPresupuestoClienteController).AsignarDescuento(FPresupuesto.Detalles, darListaSeleccionados, ADescuento);
_FocusedView.DataController.SelectRows(AuxRow,AuxRow);
_FocusedView.Controller.TopRowIndex := AuxTop;
end
finally
_FocusedView.EndUpdate;
HideHourglassCursor;
end;
}
end;
procedure TfrViewDetallesPresupuestoCliente.actAsignarDescuentoUpdate(Sender: TObject);
begin
inherited;
if not DADataSource.DataTable.IsEmpty then
(Sender as TAction).Enabled := not (DADataSource.DataTable.State in dsEditModes)
and (_FocusedView.DataController.GetSelectedCount > 0)
and (FPresupuesto.Detalles.TIPO_DETALLE = TIPO_DETALLE_CONCEPTO)
else
(Sender as TAction).Enabled := False;
end;
procedure TfrViewDetallesPresupuestoCliente.actCapituloArmarioFExecute(Sender: TObject);
begin
AnadirCapitulo(TIPO_CAPITULO_AF);
end;
procedure TfrViewDetallesPresupuestoCliente.actCapituloArmarioIExecute(Sender: TObject);
begin
AnadirCapitulo(TIPO_CAPITULO_AI);
end;
procedure TfrViewDetallesPresupuestoCliente.actCapituloBanoExecute(Sender: TObject);
begin
AnadirCapitulo(TIPO_CAPITULO_B);
end;
procedure TfrViewDetallesPresupuestoCliente.actCapituloCocinaExecute(Sender: TObject);
begin
AnadirCapitulo(TIPO_CAPITULO_C);
end;
procedure TfrViewDetallesPresupuestoCliente.actCapituloElectrodomesticosExecute(Sender: TObject);
begin
AnadirCapitulo(TIPO_CAPITULO_E);
end;
procedure TfrViewDetallesPresupuestoCliente.actCapituloVariosExecute(Sender: TObject);
begin
AnadirCapitulo(TIPO_CAPITULO_V);
end;
function TfrViewDetallesPresupuestoCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean;
begin
Result := (Controller as IDetallesPresupuestoClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Presupuesto.Cliente.ID);
end;
procedure TfrViewDetallesPresupuestoCliente.AnadirArticulosInterno;
begin
(Controller as IDetallesPresupuestoClienteController).AnadirArticulos(Detalles, Presupuesto.Cliente);
end;
procedure TfrViewDetallesPresupuestoCliente.AnadirCapitulo(const Tipo: String);
var
bEsMultiSelect : Boolean;
begin
// Debo quitar el multiselect porque provoca que se quede seleccionado
// el registro actual y no el nuevo registro que voy a a<>adir
bEsMultiSelect := _FocusedView.OptionsSelection.MultiSelect;
if bEsMultiSelect then
_FocusedView.OptionsSelection.MultiSelect := False;
ShowHourglassCursor;
_FocusedView.BeginUpdate;
try
if _FocusedView.Controller.EditingController.IsEditing then
_FocusedView.Controller.EditingController.Edit.PostEditValue;
if Assigned(Controller) and Assigned(Detalles) then
(Controller as IDetallesPresupuestoClienteController).AnadirCapitulo(Tipo, Detalles)
finally
_FocusedView.EndUpdate;
HideHourglassCursor;
// Dejo la propiedad MultiSelect como estaba
if bEsMultiSelect then
_FocusedView.OptionsSelection.MultiSelect := bEsMultiSelect;
end;
end;
procedure TfrViewDetallesPresupuestoCliente.CustomViewShow(Sender: TObject);
begin
inherited;
if not Assigned(FPropiedades) then
begin
FPropiedades := (Controller as IDetallesPresupuestoClienteController).DarPropiedades;
FPropiedades.DataTable.Active := True;
DAPropiedades.DataTable := FPropiedades.DataTable;
DAValores.DataTable := FPropiedades.Valores.DataTable;
end;
end;
procedure TfrViewDetallesPresupuestoCliente.cxGridViewDESCRIPCIONGetPropertiesForEdit(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AProperties: TcxCustomEditProperties);
begin
inherited;
//OJO sin esto no se refresca el filtro en tabla detalle "VALORES".
(cxGridViewID_PROPIEDAD.Properties as TcxLookupComboBoxProperties).ListSource.DataSet.Locate(fld_PropiedadesID, cxGridViewID_PROPIEDAD.DataBinding.Field.AsVariant,[]);
if (ARecord.DisplayTexts[cxGridViewTIPO.Index] = TIPO_DETALLE_CONCEPTO)
and ((ARecord.DisplayTexts[cxGridViewTIPO_ARTICULO.Index] = TIPO_CAPITULO_AF)
or (ARecord.DisplayTexts[cxGridViewTIPO_ARTICULO.Index] = TIPO_CAPITULO_AI)
or (ARecord.DisplayTexts[cxGridViewTIPO_ARTICULO.Index] = TIPO_CAPITULO_B)) then
AProperties := cxLookupComboBox1.Properties
else
AProperties := cxRichEdit1.Properties;
end;
function TfrViewDetallesPresupuestoCliente.EsTipoEditable(AItem: TcxCustomGridTableItem): Boolean;
var
IndiceCol : Integer;
begin
Result := True;
if (AItem.Index in [cxGridViewID_PROPIEDAD.Index, cxGridViewTIPO_ARTICULO.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
else
begin
IndiceCol := cxGridView.GetColumnByFieldName(fld_PresupuestosCliente_DetallesTIPO_ARTICULO).Index;
if ((AItem.GridView.Items[IndiceCol].EditValue <> TIPO_CAPITULO_AF) and
(AItem.GridView.Items[IndiceCol].EditValue <> TIPO_CAPITULO_AI) and
(AItem.GridView.Items[IndiceCol].EditValue <> TIPO_CAPITULO_B)) then
Result := False
end;
end
else
Result := inherited EsTipoEditable(AItem);
end;
function TfrViewDetallesPresupuestoCliente.GetPresupuesto: IBizPresupuestoCliente;
begin
Result := FPresupuesto;
end;
procedure TfrViewDetallesPresupuestoCliente.RellenarArticulosInterno;
begin
(Controller as IDetallesPresupuestoClienteController).AnadirArticulos(Detalles, Presupuesto.Cliente, False);
end;
procedure TfrViewDetallesPresupuestoCliente.SetPresupuesto(const Value: IBizPresupuestoCliente);
begin
FPresupuesto := Value;
end;
end.