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; type IViewPresupuestoCliente = interface(IViewBase) ['{C5385699-C1A4-4AEB-B3D0-EE3BDB322FE2}'] function GetPedido: IBizPresupuestoCliente; procedure SetPedido(const Value: IBizPresupuestoCliente); property Pedido: IBizPresupuestoCliente read GetPedido write SetPedido; function GetViewClientePedido: TfrViewDatosYSeleccionCliente; procedure SetViewClientePedido(const Value: TfrViewDatosYSeleccionCliente); property ViewClientePedido: TfrViewDatosYSeleccionCliente read GetViewClientePedido write SetViewClientePedido; end; TfrViewPresupuestoCliente = class(TfrViewBase, IViewPresupuestoCliente) 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 : IBizPresupuestoCliente; FViewClientePedido : TfrViewDatosYSeleccionCliente; FFormasPagoController : IFormasPagoController; function GetPedido: IBizPresupuestoCliente; procedure SetPedido(const Value: IBizPresupuestoCliente); virtual; function GetViewClientePedido: TfrViewDatosYSeleccionCliente; procedure SetViewClientePedido(const Value: TfrViewDatosYSeleccionCliente); public property Pedido: IBizPresupuestoCliente read GetPedido write SetPedido; property ViewClientePedido: TfrViewDatosYSeleccionCliente read GetViewClientePedido; end; implementation {$R *.dfm} { TfrViewPresupuestoCliente } uses uClientesController, uBizDireccionesContacto, uPresupuestosClienteController, uBizFormasPago; procedure TfrViewPresupuestoCliente.actElegirDireccionExecute(Sender: TObject); var AClientesController : IClientesController; APedidoController : IPresupuestosClienteController; ADireccion : IBizDireccionesContacto; begin inherited; AClientesController := TClientesController.Create; APedidoController := TPresupuestosClienteController.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 TfrViewPresupuestoCliente.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 TfrViewPresupuestoCliente.bFormasPagoClick(Sender: TObject); begin inherited; FFormasPagoController.VerTodos((dsFormaPago.DataTable) as IBizFormaPago); end; procedure TfrViewPresupuestoCliente.CustomViewCreate(Sender: TObject); begin inherited; FFormasPagoController := TFormasPagoController.Create; FViewClientePedido := frViewClientePedido; FViewClientePedido.MsgElegirCliente := 'Elija el cliente al que se le realizará el pedido.'; end; procedure TfrViewPresupuestoCliente.CustomViewDestroy(Sender: TObject); begin FViewClientePedido := NIL; FFormasPagoController := NIL; inherited; end; procedure TfrViewPresupuestoCliente.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 TfrViewPresupuestoCliente.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 TfrViewPresupuestoCliente.GetPedido: IBizPresupuestoCliente; begin Result := FPedido; end; function TfrViewPresupuestoCliente.GetViewClientePedido: TfrViewDatosYSeleccionCliente; begin Result := FViewClientePedido; end; procedure TfrViewPresupuestoCliente.SetPedido(const Value: IBizPresupuestoCliente); 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 TfrViewPresupuestoCliente.SetViewClientePedido(const Value: TfrViewDatosYSeleccionCliente); begin FViewClientePedido := Value; end; end.