unit uEditorFacturaCliente; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorDBItem, DB, uDADataTable, JvAppStorage, JvAppRegistryStorage, JvComponent, JvFormPlacement, ImgList, PngImageList, StdActns, ActnList, ComCtrls, TBX, TB2Item, TB2Dock, TB2Toolbar, ExtCtrls, JvExControls, JvNavigationPane, uViewFacturaCliente, uCustomView, uViewBase, uViewTotales, StdCtrls, pngimage, AppEvnts, JvComponentBase, uBizFacturasCliente, uIEditorFacturaCliente, uFacturasClienteController, uViewDetallesBase, uViewDetallesFacturaCliente, dxLayoutLookAndFeels, JvExComCtrls, JvStatusBar; type TfEditorFacturaCliente = class(TfEditorDBItem, IEditorFacturaCliente) frViewDetallesFacturaCliente1: TfrViewDetallesFacturaCliente; frViewTotales1: TfrViewTotales; frViewFacturaCliente1: TfrViewFacturaCliente; procedure FormShow(Sender: TObject); procedure frViewClienteFactura1edtlNombrePropertiesEditValueChanged( Sender: TObject); procedure frViewTotales1cxCurrencyEdit1PropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure frViewTotales1cxCurrencyEdit2PropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure dsDataTableDataChange(Sender: TObject; Field: TField); procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); procedure frViewClienteFacturaedtlNombrePropertiesChange(Sender: TObject); private FController : IFacturasClienteController; FFactura: IBizFacturaCliente; FViewFactura: IViewFacturaCliente; protected function GetController : IFacturasClienteController; procedure SetController (const Value : IFacturasClienteController); function GetFactura: IBizFacturaCliente; procedure SetFactura(const Value: IBizFacturaCliente); function GetViewFactura: IViewFacturaCliente; procedure SetViewFactura(const Value: IViewFacturaCliente); property ViewFacturaCliente: IViewFacturaCliente read GetViewFactura write SetViewFactura; procedure OnContactoChanged(Sender : TObject); procedure GuardarInterno; override; procedure EliminarInterno; override; procedure ImprimirInterno; override; procedure PrevisualizarInterno; override; public procedure PonerTitulos(const ATitulo: string = ''); override; property Controller : IFacturasClienteController read GetController write SetController; property Factura: IBizFacturaCliente read GetFactura write SetFactura; constructor Create(AOwner: TComponent); override; end; implementation {$R *.dfm} uses cxDBEdit, uBizContactos, uDataModuleUsuarios; { TfEditorFacturaCliente } { **************************** TfEditorFacturaCliente **************************** } constructor TfEditorFacturaCliente.Create(AOwner: TComponent); begin inherited; pgPaginas.ActivePageIndex := 0; ViewFacturaCliente := frViewFacturaCliente1; end; procedure TfEditorFacturaCliente.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; dsDataTable.DataTable := NIL; frViewTotales1.DADataSource.DataTable := NIL; FViewFactura := NIL; FFactura := NIL; end; procedure TfEditorFacturaCliente.dsDataTableDataChange(Sender: TObject; Field: TField); begin inherited; if Assigned(FFactura) and (not (FFactura.DataTable.Fetching) or not (FFactura.DataTable.Opening) or not (FFactura.DataTable.Closing)) then PonerTitulos; end; procedure TfEditorFacturaCliente.EliminarInterno; begin if (Application.MessageBox('¿Desea borrar esta factura de cliente?', 'Atención', MB_YESNO) = IDYES) then begin FController.Eliminar(Factura); inherited; end; end; procedure TfEditorFacturaCliente.FormShow(Sender: TObject); begin inherited; if not Assigned(FViewFactura) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(Factura) then raise Exception.Create('No hay ningún albarán asignado'); Factura.DataTable.Active := True; end; procedure TfEditorFacturaCliente.frViewClienteFactura1edtlNombrePropertiesEditValueChanged(Sender: TObject); begin inherited; with (Sender as TcxDBTextEdit) do Enabled := (FFactura.ID <> 0) end; procedure TfEditorFacturaCliente.frViewClienteFacturaedtlNombrePropertiesChange( Sender: TObject); begin inherited; PonerTitulos; end; procedure TfEditorFacturaCliente.frViewTotales1cxCurrencyEdit1PropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; Factura.DESCUENTO := DisplayValue; end; procedure TfEditorFacturaCliente.frViewTotales1cxCurrencyEdit2PropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; Factura.IVA := DisplayValue; end; function TfEditorFacturaCliente.GetController: IFacturasClienteController; begin Result := FController; end; function TfEditorFacturaCliente.GetFactura: IBizFacturaCliente; begin Result := FFactura; end; function TfEditorFacturaCliente.GetViewFactura: IViewFacturaCliente; begin Result := FViewFactura; end; procedure TfEditorFacturaCliente.GuardarInterno; begin inherited; FController.Guardar(FFactura); Modified := False; end; procedure TfEditorFacturaCliente.ImprimirInterno; begin inherited; FController.Print(FFactura); end; procedure TfEditorFacturaCliente.OnContactoChanged(Sender: TObject); begin FFactura.Cliente := frViewFacturaCliente1.frViewClienteFactura.Cliente; end; procedure TfEditorFacturaCliente.PonerTitulos(const ATitulo: string); var FTitulo : String; begin FTitulo := ATitulo; if (FTitulo = '') and Assigned(Factura) then begin if Factura.EsNuevo then FTitulo := 'Nueva factura' else FTitulo := 'Factura' + ' - ' + FFactura.Cliente.Nombre end; inherited PonerTitulos(FTitulo); Self.Caption := FTitulo + ' (' + dmUsuarios.EmpresaActual.NOMBRE + ')'; end; procedure TfEditorFacturaCliente.PrevisualizarInterno; begin inherited; FController.Preview(FFactura); end; procedure TfEditorFacturaCliente.SetController(const Value: IFacturasClienteController); begin FController := Value; if Assigned(FController) then begin frViewFacturaCliente1.frViewClienteFactura.Controller := Controller.ClienteController; frViewDetallesFacturaCliente1.Controller := Controller.DetallesController; end; end; procedure TfEditorFacturaCliente.SetFactura(const Value: IBizFacturaCliente); begin FFactura := Value; if Assigned(FFactura) then begin dsDataTable.DataTable := FFactura.DataTable; frViewTotales1.DADataSource.DataTable := FFactura.DataTable; if Assigned(FViewFactura) then begin frViewFacturaCliente1.frViewClienteFactura.Cliente := (Controller.ClienteController.Buscar(Factura.ID_CLIENTE) as IBizCliente); frViewFacturaCliente1.frViewClienteFactura.OnClienteChanged := OnContactoChanged; FViewFactura.Factura := FFactura; frViewDetallesFacturaCliente1.Detalles := FFactura.Detalles; end; Factura.DataTable.Active := True; end; end; procedure TfEditorFacturaCliente.SetViewFactura(const Value: IViewFacturaCliente); begin FViewFactura := Value; if Assigned(FViewFactura) and Assigned(Factura) then FViewFactura.Factura := Factura; end; end.