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, uViewTienda, uPresupuestosClienteController, uVendedoresController;

type
  IViewPresupuestoCliente = interface(IViewBase)
  ['{C5385699-C1A4-4AEB-B3D0-EE3BDB322FE2}']
    function GetController : IPresupuestosClienteController;
    procedure SetController (const Value : IPresupuestosClienteController);
    property Controller : IPresupuestosClienteController read GetController write SetController;

    function GetPresupuesto: IBizPresupuestoCliente;
    procedure SetPresupuesto(const Value: IBizPresupuestoCliente);
    property Presupuesto: IBizPresupuestoCliente read GetPresupuesto write SetPresupuesto;

    function GetViewClientePresupuesto: TfrViewDatosYSeleccionCliente;
    procedure SetViewClientePresupuesto(const Value: TfrViewDatosYSeleccionCliente);
    property ViewClientePresupuesto: TfrViewDatosYSeleccionCliente read GetViewClientePresupuesto write SetViewClientePresupuesto;
  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;
    dxLayoutControl1Item1: TdxLayoutItem;
    frViewClientePresupuesto: TfrViewDatosYSeleccionCliente;
    ActionList1: TActionList;
    actElegirDireccion: TAction;
    dxLayoutControl1Item4: TdxLayoutItem;
    cbFormaPago: TcxDBLookupComboBox;
    dxLayoutControl1Item5: TdxLayoutItem;
    bFormasPago: TButton;
    dxLayoutControl1Group5: TdxLayoutGroup;
    dsFormaPago: TDADataSource;
    dxLayoutControl1Group10: TdxLayoutGroup;
    dxLayoutControl1Item7: TdxLayoutItem;
    edtFechaDecision: TcxDBDateEdit;
    dxLayoutControl1Item15: TdxLayoutItem;
    eRefCliente: TcxDBTextEdit;
    dxLayoutControl1Item8: TdxLayoutItem;
    edtClienteFinal: TcxDBTextEdit;
    cbSituacion: TcxDBImageComboBox;
    dxLayoutControl1Item10: TdxLayoutItem;
    dxLayoutControl1Item9: TdxLayoutItem;
    frViewTienda1: TfrViewTienda;
    dxLayoutControl1Group3: TdxLayoutGroup;
    dxLayoutControl1Group4: TdxLayoutGroup;
    cbVendedor: TcxDBComboBox;
    dxLayoutControl1Item11: TdxLayoutItem;
    procedure CustomViewCreate(Sender: TObject);
    procedure CustomViewDestroy(Sender: TObject);
    procedure bFormasPagoClick(Sender: TObject);
    procedure frViewClientePresupuestoButton1Click(Sender: TObject);
    procedure frViewClientePresupuestoButton2Click(Sender: TObject);
    procedure cbVendedorPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
  protected
    FPresupuesto : IBizPresupuestoCliente;
    FController : IPresupuestosClienteController;
    FFormasPago : IBizFormaPago;
    FFormasPagoController : IFormasPagoController;
    FListaVendedores : TStringList;
    FViewClientePresupuesto : TfrViewDatosYSeleccionCliente;

    function GetPresupuesto: IBizPresupuestoCliente;
    procedure SetPresupuesto(const Value: IBizPresupuestoCliente); virtual;
    function GetController : IPresupuestosClienteController;
    procedure SetController (const Value : IPresupuestosClienteController);

    function GetViewClientePresupuesto: TfrViewDatosYSeleccionCliente;
    procedure SetViewClientePresupuesto(const Value: TfrViewDatosYSeleccionCliente);
  public
    property Presupuesto: IBizPresupuestoCliente read GetPresupuesto write SetPresupuesto;
    property Controller : IPresupuestosClienteController read GetController write SetController;
    property ViewClientePresupuesto: TfrViewDatosYSeleccionCliente read GetViewClientePresupuesto;
  end;

implementation

{$R *.dfm}

{ TfrViewPresupuestoCliente }

uses
  uClientesController, uBizContactos, uBizDireccionesContacto, uFactuGES_App;


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

procedure TfrViewPresupuestoCliente.cbVendedorPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
var
  AIndex : integer;
begin
  inherited;

  if Assigned(FPresupuesto) and FPresupuesto.Active then
  begin
    AIndex := StrToInt(FListaVendedores.Values[DisplayValue]);

    FPresupuesto.Edit;
    FPresupuesto.ID_VENDEDOR := AIndex;
  end;
end;

procedure TfrViewPresupuestoCliente.CustomViewCreate(Sender: TObject);
var
  i : integer;
begin
  inherited;
  FListaVendedores := NIL;

  FFormasPago := NIL;
  FFormasPagoController := TFormasPagoController.Create;

  FViewClientePresupuesto := frViewClientePresupuesto;
  FViewClientePresupuesto.MsgElegirCliente := 'Elija el cliente al que se le realizará el presupuesto.';

  with TVendedoresController.Create do
  begin
    try
      FListaVendedores := DarListaVendedores;
      with cbVendedor.Properties.Items do
      begin
        BeginUpdate;
        try
          Clear;
          for i := 0 to FListaVendedores.Count - 1 do
            Add(FListaVendedores.Names[i]);
        finally
          EndUpdate;
        end;
      end;
    finally
      Free;
    end;
  end;
end;

procedure TfrViewPresupuestoCliente.CustomViewDestroy(Sender: TObject);
begin
  FreeAndNIL(FListaVendedores);
  FFormasPago := Nil;
  FFormasPagoController := NIL;
  FViewClientePresupuesto := NIL;
  inherited;
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;
  frViewClientePresupuesto.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;
  frViewClientePresupuesto.actAnadirContacto.Execute;
end;

function TfrViewPresupuestoCliente.GetController: IPresupuestosClienteController;
begin
  Result := FController;
end;

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

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

procedure TfrViewPresupuestoCliente.SetController(const Value: IPresupuestosClienteController);
begin
  FController := Value;
end;

procedure TfrViewPresupuestoCliente.SetPresupuesto(const Value: IBizPresupuestoCliente);
var
  i : integer;
begin
  FPresupuesto := Value;
  if Assigned(FPresupuesto) then
  begin
    DADataSource.DataTable := FPresupuesto.DataTable;
    cbVendedor.Text := '';
    for i := 0 to FListaVendedores.Count-1 do
    begin
      if FListaVendedores.ValueFromIndex[i] = IntToStr(FPresupuesto.ID_VENDEDOR) then
      begin
        cbVendedor.Text := FListaVendedores.Names[i];
        Break;
      end;
    end;

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

    frViewClientePresupuesto.Cliente := FPresupuesto.Cliente;
    frViewTienda1.DataItem := FPresupuesto.DataTable;
  end
  else begin
    DADataSource.DataTable := NIL;
    dsFormaPago.DataTable := NIL;
    frViewClientePresupuesto.Cliente := nil;
  end;
end;

procedure TfrViewPresupuestoCliente.SetViewClientePresupuesto(const Value: TfrViewDatosYSeleccionCliente);
begin
  FViewClientePresupuesto := Value;
end;

end.
