unit uViewPedidoCliente; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewBase, uBizPedidosCliente, DB, uDADataTable, uCustomView, AppEvnts, StdCtrls, Mask, DBCtrls, uViewObservaciones, uViewDatosYSeleccionCliente, cxGraphics, cxDropDownEdit, cxImageComboBox, cxDBEdit, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxCalendar, dxLayoutControl, cxControls, cxMemo, uViewDireccionEntregaPedidoCliente, Buttons, ActnList, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, uFormasPagoController; 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 GetViewClientePedido: TfrViewDatosYSeleccionCliente; procedure SetViewClientePedido(const Value: TfrViewDatosYSeleccionCliente); property ViewClientePedido: TfrViewDatosYSeleccionCliente read GetViewClientePedido write SetViewClientePedido; 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: TfrViewDatosYSeleccionCliente; 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; dxLayoutControl1Item4: TdxLayoutItem; cbFormaPago: TcxDBLookupComboBox; dxLayoutControl1Item5: TdxLayoutItem; bFormasPago: TButton; dxLayoutControl1Group5: TdxLayoutGroup; dsFormaPago: TDADataSource; dxLayoutControl1Group10: TdxLayoutGroup; dxLayoutControl1Item7: TdxLayoutItem; edtFechaPrevistaEnvio: TcxDBDateEdit; dxLayoutControl1Item15: TdxLayoutItem; eRefCliente: TcxDBTextEdit; 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; FViewClientePedido : TfrViewDatosYSeleccionCliente; FFormasPagoController : IFormasPagoController; function GetPedido: IBizPedidoCliente; procedure SetPedido(const Value: IBizPedidoCliente); virtual; function GetViewClientePedido: TfrViewDatosYSeleccionCliente; procedure SetViewClientePedido(const Value: TfrViewDatosYSeleccionCliente); public property Pedido: IBizPedidoCliente read GetPedido write SetPedido; property ViewClientePedido: TfrViewDatosYSeleccionCliente read GetViewClientePedido; end; implementation {$R *.dfm} { TfrViewPedidoCliente } uses uClientesController, uBizDireccionesContacto, uPedidosClienteController, uBizFormasPago; 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.bFormasPagoClick(Sender: TObject); begin inherited; FFormasPagoController.VerTodos((dsFormaPago.DataTable) as IBizFormaPago); end; procedure TfrViewPedidoCliente.CustomViewCreate(Sender: TObject); begin inherited; 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; 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.GetPedido: IBizPedidoCliente; begin Result := FPedido; end; function TfrViewPedidoCliente.GetViewClientePedido: TfrViewDatosYSeleccionCliente; begin Result := FViewClientePedido; end; procedure TfrViewPedidoCliente.SetPedido(const Value: IBizPedidoCliente); begin FPedido := Value; if Assigned(FPedido) then begin DADataSource.DataTable := FPedido.DataTable; dsFormaPago.DataTable := FFormasPagoController.BuscarTodos.DataTable; dsFormaPago.DataTable.Active := True; frViewClientePedido.Cliente := FPedido.Cliente; end else begin DADataSource.DataTable := NIL; dsFormaPago.DataTable := NIL; frViewClientePedido.Cliente := nil; end; end; procedure TfrViewPedidoCliente.SetViewClientePedido(const Value: TfrViewDatosYSeleccionCliente); begin FViewClientePedido := Value; end; end.