unit uViewFacturaProveedor; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewBase, DB, uDADataTable, uCustomView, uViewDatosYSeleccionCliente, uBizFacturasProveedor, cxControls, cxContainer, cxEdit, cxTextEdit, cxDBEdit, dxLayoutControl, cxMemo, cxMaskEdit, cxDropDownEdit, cxCalendar, cxSpinEdit, StdCtrls, Mask, DBCtrls, cxGraphics, dxLayoutLookAndFeels, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox, uFormasPagoController, uViewDatosYSeleccionProveedor, uDAInterfaces, uBizFormasPago, uViewTienda, uFacturasProveedorController, ActnList, uViewProveedorFactura, uViewObservaciones; type IViewFacturaProveedor = interface(IViewBase) ['{DD934441-75CC-452F-8861-684961E90BB6}'] function GetController : IFacturasProveedorController; procedure SetController (const Value : IFacturasProveedorController); property Controller : IFacturasProveedorController read GetController write SetController; function GetFactura: IBizFacturaProveedor; procedure SetFactura(const Value: IBizFacturaProveedor); property Factura: IBizFacturaProveedor read GetFactura write SetFactura; end; TfrViewFacturaProveedor = class(TfrViewBase, IViewFacturaProveedor) DADataSource: TDADataSource; dxLayoutControl1Group_Root: TdxLayoutGroup; dxLayoutControl1: TdxLayoutControl; dxLayoutControl1Item1: TdxLayoutItem; eReferencia: TcxDBTextEdit; dxLayoutControl1Item2: TdxLayoutItem; edtFecha: TcxDBDateEdit; dxLayoutControl1Group1: TdxLayoutGroup; dxLayoutControl1Group2: TdxLayoutGroup; dxLayoutControl1Group5: TdxLayoutGroup; dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel; dsFormaPago: TDADataSource; dxLayoutControl1Item4: TdxLayoutItem; cbFormaPago: TcxDBLookupComboBox; dxLayoutControl1Item10: TdxLayoutItem; bFormasPago: TButton; dxLayoutControl1Group6: TdxLayoutGroup; dxLayoutControl1Item6: TdxLayoutItem; eReferenciaProveedor: TcxDBTextEdit; dxLayoutControl1Group4: TdxLayoutGroup; dxLayoutControl1Item7: TdxLayoutItem; frViewTienda1: TfrViewTienda; dxLayoutControl1Group7: TdxLayoutGroup; ledtFechaVencimiento: TdxLayoutItem; edtFechaVencimiento: TcxDBDateEdit; ActionList1: TActionList; actElegirDireccion: TAction; dxLayoutControl1Item3: TdxLayoutItem; frViewProveedorFactura1: TfrViewProveedorFactura; dxLayoutControl1Group8: TdxLayoutGroup; dxLayoutControl1Group3: TdxLayoutGroup; frViewObservaciones1: TfrViewObservaciones; dxLayoutControl1Item5: TdxLayoutItem; dxLayoutControl1Item8: TdxLayoutItem; cbTipoFactura: TcxDBLookupComboBox; dsTiposFactura: TDADataSource; procedure bFormasPagoClick(Sender: TObject); procedure CustomViewDestroy(Sender: TObject); procedure CustomViewCreate(Sender: TObject); procedure frViewProveedorFacturaButton1Click(Sender: TObject); procedure frViewProveedorFacturaButton2Click(Sender: TObject); procedure actElegirDireccionExecute(Sender: TObject); procedure actElegirDireccionUpdate(Sender: TObject); procedure cbFormaPagoPropertiesEditValueChanged(Sender: TObject); protected FFactura : IBizFacturaProveedor; FFormasPago : IBizFormaPago; FTiposFacturaProveedor : IBizTiposFacturaProveedor; FFormasPagoController : IFormasPagoController; FController : IFacturasProveedorController; function GetFactura: IBizFacturaProveedor; procedure SetFactura(const Value: IBizFacturaProveedor); function GetController : IFacturasProveedorController; procedure SetController (const Value : IFacturasProveedorController); public property Factura: IBizFacturaProveedor read GetFactura write SetFactura; property Controller : IFacturasProveedorController read GetController write SetController; end; implementation uses DateUtils, uDataModuleContactos, schFacturasProveedorClient_Intf, uBizDireccionesContacto, uProveedoresController; {$R *.dfm} { TfrViewFacturaProveedor } procedure TfrViewFacturaProveedor.actElegirDireccionExecute(Sender: TObject); var AProveedoresController : IProveedoresController; ADireccion : IBizDireccionesContacto; begin inherited; AProveedoresController := TProveedoresController.Create; try ADireccion := AProveedoresController.ElegirDireccion(FFactura.Proveedor, 'Seleccione la dirección del Proveedor que quiere utilizar como dirección de envio de este Albaran.'); if Assigned(ADireccion) then Controller.CopiarDireccion(ADireccion, FFactura); finally AProveedoresController := NIL; end; end; procedure TfrViewFacturaProveedor.actElegirDireccionUpdate(Sender: TObject); begin inherited; if (Sender as TAction).Enabled then (Sender as TAction).Enabled := (not ReadOnly) and Assigned(FFactura) and FFactura.DataTable.Active and Assigned(FFactura.Proveedor) and Assigned(FFactura.Proveedor) and Assigned(FFactura.Proveedor.Direcciones) and FFactura.Proveedor.Direcciones.DataTable.Active and (FFactura.Proveedor.Direcciones.DataTable.RecordCount > 0); end; procedure TfrViewFacturaProveedor.bFormasPagoClick(Sender: TObject); begin inherited; if Assigned(FFormasPago) then FFormasPagoController.VerTodos(FFormasPago); end; procedure TfrViewFacturaProveedor.cbFormaPagoPropertiesEditValueChanged(Sender: TObject); begin if Assigned(Factura) and (Factura.DataTable.State in dsEditModes) then begin if Assigned(FFormasPago) then if (FFormasPago.Plazos.RecordCount = 0) then begin edtFechaVencimiento.EditValue := DateOf(Now); ledtFechaVencimiento.Enabled := True end else begin Application.MessageBox('Ha elegido una forma de pago con plazos asignados, los vencimientos se regiran por dichos plazos', 'Atención', MB_OK); edtFechaVencimiento.EditValue := Null; ledtFechaVencimiento.Enabled := False; end; end; end; procedure TfrViewFacturaProveedor.CustomViewCreate(Sender: TObject); begin inherited; FFormasPago := Nil; FTiposFacturaProveedor := Nil; FFormasPagoController := TFormasPagoController.Create; frViewProveedorFactura1.MsgElegirProveedor := 'Elija el proveedor al que se le realizará la factura.'; cbFormaPago.Properties.OnEditValueChanged := cbFormaPagoPropertiesEditValueChanged; end; procedure TfrViewFacturaProveedor.CustomViewDestroy(Sender: TObject); begin cbFormaPago.Properties.OnEditValueChanged := Nil; FFormasPago := Nil; FTiposFacturaProveedor := Nil; FFormasPagoController := NIL; inherited; end; procedure TfrViewFacturaProveedor.frViewProveedorFacturaButton1Click(Sender: TObject); begin if Assigned(Factura) and Assigned(Factura.Proveedor) and Assigned (Factura.Detalles) and (Factura.Detalles.RecordCount > 0) then begin if (Application.MessageBox('Si cambia de proveedor, se eliminarán todos sus artículos de la factura actual, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then Exit; end; frViewProveedorFactura.actElegirContacto.Execute; end; procedure TfrViewFacturaProveedor.frViewProveedorFacturaButton2Click( Sender: TObject); begin if Assigned(Factura) and Assigned(Factura.Proveedor) and Assigned (Factura.Detalles) and (Factura.Detalles.RecordCount > 0) then begin if (Application.MessageBox('Si cambia de proveedor, se eliminarán todos sus artículos de la factura actual, ¿Desea continuar?', 'Atención', MB_YESNO) = IDNO) then Exit; end; frViewProveedorFactura1.actAnadirContacto.Execute; end; function TfrViewFacturaProveedor.GetController: IFacturasProveedorController; begin Result := FController; end; function TfrViewFacturaProveedor.GetFactura: IBizFacturaProveedor; begin Result := FFactura; end; procedure TfrViewFacturaProveedor.SetController(const Value: IFacturasProveedorController); begin FController := Value; if Assigned(FController) then frViewProveedorFactura1.Controller := Controller.ProveedorController; end; procedure TfrViewFacturaProveedor.SetFactura(const Value: IBizFacturaProveedor); begin FFactura := Value; if Assigned(FFactura) then begin DADataSource.DataTable := FFactura.DataTable; frViewTienda1.DataItem := FFactura.DataTable; FFormasPago := FFormasPagoController.BuscarTodos; dsFormaPago.DataTable := FFormasPago.DataTable; dsFormaPago.DataTable.Active := True; //Posicionamos la tabla en la forma de pago que tiene la factura ya que no lo hace el componente por si solo FFormasPago.DataTable.Locate(fld_FacturasProveedorID, FFactura.ID_FORMA_PAGO, []); if (FFormasPago.Plazos.RecordCount = 0) then ledtFechaVencimiento.Enabled := True else ledtFechaVencimiento.Enabled := False; FTiposFacturaProveedor := FController.darTiposFacturaProveedor; dsTiposFactura.DataTable := FTiposFacturaProveedor.DataTable; dsTiposFactura.DataTable.Active := True; //Solo se deshabilita al insertar, luego la referencia será modificable //eReferencia.Enabled := (FFactura.DataTable.State = dsInsert); if FFactura.TIPO = CTE_TIPO_ABONO then begin dxLayoutControl1Item2.Caption := 'Fecha del abono:'; dxLayoutControl1Group1.Caption := 'Datos del abono'; end; end else begin DADataSource.DataTable := NIL; dsFormaPago.DataTable := NIL; frViewProveedorFactura1.Proveedor := NIL end; end; end.