unit uViewPedidoCliente; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewBase, uBizPedidosCliente, DB, uDADataTable, uCustomView, AppEvnts, StdCtrls, Mask, DBCtrls, uViewObservaciones, uViewDatosYSeleccionClientePedido, cxGraphics, cxDropDownEdit, cxImageComboBox, cxDBEdit, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxCalendar, dxLayoutControl, cxControls, cxMemo, uViewDireccionEntregaPedidoCliente, Buttons, ActnList, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, uFormasPagoController, cxLookAndFeels, cxLookAndFeelPainters, dxLayoutcxEditAdapters, uDAInterfaces, uBizFormasPago, uPedidosClienteController, cxSpinEdit; type IViewPedidoCliente = interface(IViewBase) ['{C5385699-C1A4-4AEB-B3D0-EE3BDB322FE2}'] function GetPedido: IBizPedidoCliente; procedure SetPedido(const Value: IBizPedidoCliente); property Pedido: IBizPedidoCliente read GetPedido write SetPedido; function GetController : IPedidosClienteController; procedure SetController (const Value : IPedidosClienteController); property Controller : IPedidosClienteController read GetController write SetController; function GetViewClientePedido: TfrViewDatosYSeleccionClientePedido; procedure SetViewClientePedido(const Value: TfrViewDatosYSeleccionClientePedido); property ViewClientePedido: TfrViewDatosYSeleccionClientePedido read GetViewClientePedido write SetViewClientePedido; procedure RellenarCuentasBancarias; procedure AsignarCuentaBancaria; end; TfrViewPedidoCliente = class(TfrViewBase, IViewPedidoCliente) DADataSource: TDADataSource; dxLayoutControl1Group_Root: TdxLayoutGroup; dxLayoutControl1: TdxLayoutControl; dxLayoutControl1Item2: TdxLayoutItem; edtFechaPedido: TcxDBDateEdit; dxLayoutControl1Group1: TdxLayoutGroup; dxLayoutControl1Group2: TdxLayoutGroup; dxLayoutControl1Item6: TdxLayoutItem; memObservaciones: TcxDBMemo; dxLayoutControl1Item3: TdxLayoutItem; eReferencia: TcxDBTextEdit; dxLayoutControl1Group6: TdxLayoutGroup; dxLayoutControl1Group7: TdxLayoutGroup; dxLayoutControl1Group8: TdxLayoutGroup; dxLayoutControl1Item1: TdxLayoutItem; frViewClientePedido: TfrViewDatosYSeleccionClientePedido; dxLayoutControl1Item8: TdxLayoutItem; eCalle: TcxDBTextEdit; dxLayoutControl1Item9: TdxLayoutItem; ePoblacion: TcxDBTextEdit; dxLayoutControl1Item10: TdxLayoutItem; eCodigoPostal: TcxDBTextEdit; dxLayoutControl1Item11: TdxLayoutItem; eProvincia: TcxDBTextEdit; dxLayoutControl1Item12: TdxLayoutItem; ePersonaContacto: TcxDBTextEdit; dxLayoutControl1Item13: TdxLayoutItem; eTlfTrabajo: TcxDBTextEdit; dxLayoutControl1Group4: TdxLayoutGroup; dxLayoutControl1Group9: TdxLayoutGroup; dxLayoutControl1Item14: TdxLayoutItem; bElegirDireccion: TBitBtn; ActionList1: TActionList; actElegirDireccion: TAction; dxLayoutControl1Item5: TdxLayoutItem; bFormasPago: TButton; dsFormaPago: TDADataSource; dxLayoutControl1Group10: TdxLayoutGroup; dxLayoutControl1Item7: TdxLayoutItem; edtFechaPrevistaEnvio: TcxDBDateEdit; dxLayoutControl1Item15: TdxLayoutItem; eRefCliente: TcxDBTextEdit; dxLayoutControl1Group5: TdxLayoutGroup; cbFormaPago: TcxDBLookupComboBox; dxLayoutControl1Item4: TdxLayoutItem; dxLayoutControl1Group3: TdxLayoutGroup; cbCuentaBancaria: TcxDBComboBox; dxLayoutControl1Item16: TdxLayoutItem; procedure CustomViewCreate(Sender: TObject); procedure CustomViewDestroy(Sender: TObject); procedure actElegirDireccionExecute(Sender: TObject); procedure actElegirDireccionUpdate(Sender: TObject); procedure bFormasPagoClick(Sender: TObject); procedure frViewClientePedidoButton1Click(Sender: TObject); procedure frViewClientePedidoButton2Click(Sender: TObject); protected FPedido : IBizPedidoCliente; FController : IPedidosClienteController; FViewClientePedido : TfrViewDatosYSeleccionClientePedido; FFormasPago : IBizFormaPago; FFormasPagoController : IFormasPagoController; function GetController : IPedidosClienteController; procedure SetController (const Value : IPedidosClienteController); function GetPedido: IBizPedidoCliente; procedure SetPedido(const Value: IBizPedidoCliente); virtual; function GetViewClientePedido: TfrViewDatosYSeleccionClientePedido; procedure SetViewClientePedido(const Value: TfrViewDatosYSeleccionClientePedido); public property Pedido: IBizPedidoCliente read GetPedido write SetPedido; property ViewClientePedido: TfrViewDatosYSeleccionClientePedido read GetViewClientePedido; property Controller : IPedidosClienteController read GetController write SetController; procedure RellenarCuentasBancarias; procedure AsignarCuentaBancaria; end; implementation {$R *.dfm} { TfrViewPedidoCliente } uses uFactuGES_App, uEmpresasController, uClientesController, uBizDireccionesContacto; procedure TfrViewPedidoCliente.actElegirDireccionExecute(Sender: TObject); var AClientesController : IClientesController; APedidoController : IPedidosClienteController; ADireccion : IBizDireccionesContacto; begin inherited; { AClientesController := TClientesController.Create; APedidoController := TPedidosClienteController.Create; try ADireccion := AClientesController.ElegirDireccionEntrega(FPedido.Cliente.Direcciones, 'Seleccione la dirección del cliente que quiere utilizar como dirección de envio de este pedido.'); if Assigned(ADireccion) then begin APedidoController.CopiarDireccionEnvio(ADireccion, FPedido); FPedido.Edit; FPedido.IMPORTE_PORTE := ADireccion.PORTE; end; finally AClientesController := NIL; APedidoController := NIL; end; } end; procedure TfrViewPedidoCliente.actElegirDireccionUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (not ReadOnly) and Assigned(FPedido) and Assigned(FViewClientePedido) and FPedido.DataTable.Active and Assigned(FPedido.Cliente) and Assigned(FPedido.Cliente) and Assigned(FPedido.Cliente.Direcciones) and FPedido.Cliente.Direcciones.DataTable.Active and (FPedido.Cliente.Direcciones.DataTable.RecordCount > 0); end; procedure TfrViewPedidoCliente.AsignarCuentaBancaria; begin FPedido.Edit; try FPedido.DATOS_BANCARIOS := cbCuentaBancaria.Properties.Items[0]; finally FPedido.Post; end; end; procedure TfrViewPedidoCliente.bFormasPagoClick(Sender: TObject); begin inherited; if Assigned(FFormasPago) then FFormasPagoController.VerTodos(FFormasPago); end; procedure TfrViewPedidoCliente.CustomViewCreate(Sender: TObject); begin inherited; FFormasPago := Nil; FFormasPagoController := TFormasPagoController.Create; FViewClientePedido := frViewClientePedido; // FViewClientePedido.MsgElegirCliente := 'Elija el cliente al que se le realizará el pedido.'; end; procedure TfrViewPedidoCliente.CustomViewDestroy(Sender: TObject); begin FViewClientePedido := NIL; FFormasPago := Nil; FFormasPagoController := NIL; inherited; end; procedure TfrViewPedidoCliente.frViewClientePedidoButton1Click(Sender: TObject); begin if Assigned(Pedido) and Assigned(Pedido.Cliente) and Assigned (Pedido.Detalles) and (Pedido.Detalles.RecordCount > 0) then begin if (Application.MessageBox('Los descuentos de los artículos del pedido serán actualizados con los del nuevo cliente seleccionado, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then Exit; end; frViewClientePedido.actElegirContacto.Execute; end; procedure TfrViewPedidoCliente.frViewClientePedidoButton2Click(Sender: TObject); begin if Assigned(Pedido) and Assigned(Pedido.Cliente) and Assigned (Pedido.Detalles) and (Pedido.Detalles.RecordCount > 0) then begin if (Application.MessageBox('Los descuentos de los artículos del pedido serán actualizados con los del nuevo cliente seleccionado, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then Exit; end; frViewClientePedido.actAnadirContacto.Execute; end; function TfrViewPedidoCliente.GetController: IPedidosClienteController; begin Result := FController; end; function TfrViewPedidoCliente.GetPedido: IBizPedidoCliente; begin Result := FPedido; end; function TfrViewPedidoCliente.GetViewClientePedido: TfrViewDatosYSeleccionClientePedido; begin Result := FViewClientePedido; end; procedure TfrViewPedidoCliente.RellenarCuentasBancarias; var AController : IEmpresasController; ALista : TStringList; AListaIBAN : TStringList; AListaCliente: TStringList; i : integer; begin AController := TEmpresasController.Create; try ALista := AController.DarListaCuentasBancarias(AppFactuGES.EmpresaActiva); AListaIBAN := AController.DarListaCuentasBancariasIBAN(AppFactuGES.EmpresaActiva); AListaCliente := Controller.ClienteController.DarListaCuentasBancarias(FPedido.ID_CLIENTE); try with cbCuentaBancaria.Properties.Items do begin BeginUpdate; try Clear; { for i := 0 to ALista.Count - 1 do Add(ALista.Names[i]); if AListaIBAN.Count > 0 then begin Add('--------------'); for i := 0 to AListaIBAN.Count - 1 do Add(AListaIBAN.Names[i]); end; } if AListaCliente.Count > 0 then begin // Add('--------------'); for i := 0 to AListaCliente.Count - 1 do Add(AListaCliente.Names[i]); end; Add(''); finally EndUpdate; end; end; finally FreeANDNIL(ALista); FreeANDNIL(AListaIBAN); end; finally AController := NIL; end; end; procedure TfrViewPedidoCliente.SetController(const Value: IPedidosClienteController); begin FController := Value; end; procedure TfrViewPedidoCliente.SetPedido(const Value: IBizPedidoCliente); begin FPedido := Value; RellenarCuentasBancarias; if Assigned(FPedido) then begin DADataSource.DataTable := FPedido.DataTable; FViewClientePedido.Pedido := FPedido; FFormasPago := FFormasPagoController.BuscarTodos; dsFormaPago.DataTable := FFormasPago.DataTable; dsFormaPago.DataTable.Active := True; end else begin DADataSource.DataTable := NIL; dsFormaPago.DataTable := NIL; frViewClientePedido.Pedido := nil; end; end; procedure TfrViewPedidoCliente.SetViewClientePedido(const Value: TfrViewDatosYSeleccionClientePedido); begin FViewClientePedido := Value; end; end.