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; ledtSituacion: TdxLayoutItem; edtSituacion: TcxDBComboBox; 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); procedure edtFechaVencimientoPropertiesEditValueChanged(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; edtSituacion.EditValue := CTE_PENDIENTE; ledtSituacion.Enabled := True; end else begin Application.MessageBox('Ha elegido una forma de pago con plazos asignados, la situación de la factura vendrá dada por la situación de los recibos generados según los plazos', 'Atención', MB_OK); edtFechaVencimiento.EditValue := Null; ledtFechaVencimiento.Enabled := False; edtSituacion.EditValue := CTE_PENDIENTE; ledtSituacion.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.edtFechaVencimientoPropertiesEditValueChanged( Sender: TObject); begin inherited; if Assigned(Factura) and (Factura.DataTable.State in dsEditModes) then begin if (edtFechaVencimiento.EditValue <> null) then begin if (edtFechaVencimiento.EditValue = 0) then begin Factura.DataTable.DisableEventHandlers; try Factura.DataTable.FieldByName(fld_FacturasProveedorFECHA_VENCIMIENTO).Clear; finally Factura.DataTable.EnableEventHandlers; end; end else begin Application.MessageBox('Ha elegido una fecha de vencimiento, la situación de la factura vendrá dada por la situación del recibo generado con el vencimiento dado', 'Atención', MB_OK); edtSituacion.EditValue := CTE_PENDIENTE; ledtSituacion.Enabled := False; end; end else begin // edtSituacion.EditValue := CTE_PENDIENTE; ledtSituacion.Enabled := True; end; end; 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 ((not FFactura.FECHA_VENCIMIENTOIsNull) or (FFormasPago.Plazos.RecordCount > 0)) then begin if (edtFechaVencimiento.EditingValue <> null) then ledtSituacion.Enabled := False; if (FFormasPago.Plazos.RecordCount > 0) then ledtFechaVencimiento.Enabled := False else ledtFechaVencimiento.Enabled := true; end else begin ledtFechaVencimiento.Enabled := True; ledtSituacion.Enabled := True; end; 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.