unit uViewPresupuestoCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewBase, uBizPresupuestosCliente, DB, uDADataTable, uCustomView,
  AppEvnts, StdCtrls, Mask, DBCtrls,
  uViewObservaciones,  uViewDatosYSeleccionCliente,
  cxGraphics, cxDropDownEdit, cxImageComboBox, cxDBEdit, cxContainer, cxEdit,
  cxTextEdit, cxMaskEdit, cxCalendar, dxLayoutControl, cxControls, cxMemo,
  uViewDireccionEntregaPresupuestoCliente, Buttons, ActnList, cxLookupEdit,
  cxDBLookupEdit, cxDBLookupComboBox, uFormasPagoController, uDAInterfaces,
  uBizFormasPago, cxButtonEdit, uViewDatosYSeleccionClientePresupuesto, uBizContactos,
  uVendedoresController;

type
  IViewPresupuestoCliente = interface(IViewBase)
  ['{A970B43E-E542-40F5-B265-41B7EFA613F9}']
    function GetPresupuesto: IBizPresupuestoCliente;
    procedure SetPresupuesto(const Value: IBizPresupuestoCliente);
    property Presupuesto: IBizPresupuestoCliente read GetPresupuesto write SetPresupuesto;

    function GetViewClientePresupuesto: IViewDatosYSeleccionClientePresupuesto;
    property ViewClientePresupuesto: IViewDatosYSeleccionClientePresupuesto read GetViewClientePresupuesto;
  end;

  TfrViewPresupuestoCliente = class(TfrViewBase, IViewPresupuestoCliente)
    DADataSource: TDADataSource;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    dxLayoutControl1Item2: TdxLayoutItem;
    edtFechaPresupuesto: TcxDBDateEdit;
    dxLayoutControl1Group1: TdxLayoutGroup;
    dxLayoutControl1Group2: TdxLayoutGroup;
    dxLayoutControl1Item6: TdxLayoutItem;
    memObservaciones: TcxDBMemo;
    dxLayoutControl1Item3: TdxLayoutItem;
    eReferencia: TcxDBTextEdit;
    dxLayoutControl1Group7: TdxLayoutGroup;
    ActionList1: TActionList;
    dxLayoutControl1Item4: TdxLayoutItem;
    cbFormaPago: TcxDBLookupComboBox;
    dxLayoutControl1Item5: TdxLayoutItem;
    bFormasPago: TButton;
    dxLayoutControl1Group5: TdxLayoutGroup;
    dsFormaPago: TDADataSource;
    dxLayoutControl1Item7: TdxLayoutItem;
    edtFechaDecision: TcxDBDateEdit;
    dxLayoutControl1Item15: TdxLayoutItem;
    edtFechaVigencia: TcxDBDateEdit;
    cbSituacion: TcxDBImageComboBox;
    dxLayoutControl1Item10: TdxLayoutItem;
    dxLayoutControl1Group8: TdxLayoutGroup;
    frViewDatosYSeleccionClientePresupuesto1: TfrViewDatosYSeleccionClientePresupuesto;
    dxLayoutControl1Item1: TdxLayoutItem;
    dxLayoutControl1Item8: TdxLayoutItem;
    memFormaPago: TcxDBMemo;
    dxLayoutControl1Group3: TdxLayoutGroup;
    dxLayoutControl1Item9: TdxLayoutItem;
    memPlazoEntrega: TcxDBMemo;
    dxLayoutControl1Group4: TdxLayoutGroup;
    dxLayoutControl1Group6: TdxLayoutGroup;
    dxLayoutControl1Item11: TdxLayoutItem;
    dxLayoutControl1Group9: TdxLayoutGroup;
    cbVendedor: TcxDBLookupComboBox;
    dsVendedor: TDADataSource;
    dxLayoutControl1Group10: TdxLayoutGroup;
    dxLayoutControl1Item12: TdxLayoutItem;
    cbTipoPresupuesto: TcxDBComboBox;
    dxLayoutControl1Group11: TdxLayoutGroup;
    dxLayoutControl1Item13: TdxLayoutItem;
    edtRef_cliente: TcxDBTextEdit;
    dxLayoutControl1Group12: TdxLayoutGroup;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure bFormasPagoClick(Sender: TObject);
    procedure frViewClientePresupuestoButton1Click(Sender: TObject);
    procedure frViewClientePresupuestoButton2Click(Sender: TObject);
  protected
    FPresupuesto : IBizPresupuestoCliente;
    FFormasPago : IBizFormaPago;
    FVendedor : IBizVendedor;
    FFormasPagoController : IFormasPagoController;
    FVendedoresController : IVendedoresController;
    FViewClientePresupuesto : IViewDatosYSeleccionClientePresupuesto;

    function GetPresupuesto: IBizPresupuestoCliente;
    procedure SetPresupuesto(const Value: IBizPresupuestoCliente); virtual;
    function GetViewClientePresupuesto: IViewDatosYSeleccionClientePresupuesto;
  public
    property Presupuesto: IBizPresupuestoCliente read GetPresupuesto write SetPresupuesto;
    property ViewClientePresupuesto: IViewDatosYSeleccionClientePresupuesto read GetViewClientePresupuesto;
  end;

implementation

{$R *.dfm}

{ TfrViewPresupuestoCliente }

uses
  uClientesController, uBizDireccionesContacto, uPresupuestosClienteController;


procedure TfrViewPresupuestoCliente.bFormasPagoClick(Sender: TObject);
begin
  inherited;
  if Assigned(FFormasPago) then
     FFormasPagoController.VerTodos(FFormasPago);
end;

procedure TfrViewPresupuestoCliente.CustomViewCreate(Sender: TObject);
begin
  inherited;
  FFormasPago := Nil;
  FVendedor := Nil;
  FFormasPagoController := TFormasPagoController.Create;
  FVendedoresController := TVendedoresController.Create;
  FViewClientePresupuesto := frViewDatosYSeleccionClientePresupuesto1;

  cbTipoPresupuesto.Properties.Items.Clear;
  cbTipoPresupuesto.Properties.Items.Add(CTE_COCINA);
  cbTipoPresupuesto.Properties.Items.Add(CTE_ARMARIO);
  cbTipoPresupuesto.Properties.Items.Add(CTE_BANO);
  cbTipoPresupuesto.Properties.Items.Add(CTE_ELECTRODOMESTICO);
  cbTipoPresupuesto.Properties.Items.Add(CTE_OBRA);
  cbTipoPresupuesto.Properties.Items.Add(CTE_VARIOS);
end;

procedure TfrViewPresupuestoCliente.CustomViewDestroy(Sender: TObject);
begin
  inherited;
  FFormasPago := Nil;
  FFormasPagoController := NIL;
  FVendedor := Nil;
  FVendedoresController := NIL;
  FViewClientePresupuesto := NIL;
end;

procedure TfrViewPresupuestoCliente.frViewClientePresupuestoButton1Click(Sender: TObject);
begin
  if Assigned(Presupuesto) and Assigned(Presupuesto.Cliente) and
    Assigned (Presupuesto.Detalles) and (Presupuesto.Detalles.RecordCount > 0) then
  begin
    if (Application.MessageBox('Los descuentos de los artículos del presupuesto serán actualizados con los del nuevo cliente seleccionado, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then
      Exit;
  end;
  frViewDatosYSeleccionClientePresupuesto1.actElegirContacto.Execute;
end;

procedure TfrViewPresupuestoCliente.frViewClientePresupuestoButton2Click(Sender: TObject);
begin
  if Assigned(Presupuesto) and Assigned(Presupuesto.Cliente) and
    Assigned (Presupuesto.Detalles) and (Presupuesto.Detalles.RecordCount > 0) then
  begin
    if (Application.MessageBox('Los descuentos de los artículos del presupuesto serán actualizados con los del nuevo cliente seleccionado, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then
      Exit;
  end;
  frViewDatosYSeleccionClientePresupuesto1.actAnadirContacto.Execute;
end;

function TfrViewPresupuestoCliente.GetPresupuesto: IBizPresupuestoCliente;
begin
  Result := FPresupuesto;
end;

function TfrViewPresupuestoCliente.GetViewClientePresupuesto: IViewDatosYSeleccionClientePresupuesto;
begin
  Result := FViewClientePresupuesto;
end;

procedure TfrViewPresupuestoCliente.SetPresupuesto(const Value: IBizPresupuestoCliente);
begin
  FPresupuesto := Value;
  if Assigned(FPresupuesto) then
  begin
    DADataSource.DataTable := FPresupuesto.DataTable;

    FFormasPago := FFormasPagoController.BuscarTodos;
    dsFormaPago.DataTable := FFormasPago.DataTable;
    dsFormaPago.DataTable.Active := True;

    FVendedor := (FVendedoresController.BuscarTodos as IBizVendedor);
    dsVendedor.DataTable := FVendedor.DataTable;
    dsVendedor.DataTable.Active := True;

    FViewClientePresupuesto.Presupuesto := FPresupuesto;
  end
  else begin
    DADataSource.DataTable := NIL;
    dsFormaPago.DataTable := NIL;
    dsVendedor.DataTable := NIL;    
    FViewClientePresupuesto.Presupuesto := Nil;
  end;
end;

end.
