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, uViewDetallesDTO, uViewDetallesArticulos; type TfEditorFacturaCliente = class(TfEditorDBItem, IEditorFacturaCliente) frViewDetallesFacturaCliente1: TfrViewDetallesFacturaCliente; frViewFacturaCliente1: TfrViewFacturaCliente; frViewTotales1: TfrViewTotales; procedure FormShow(Sender: TObject); procedure frViewClienteFactura1edtlNombrePropertiesEditValueChanged( Sender: TObject); procedure dsDataTableDataChange(Sender: TObject; Field: TField); procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); procedure frViewClienteFacturaedtlNombrePropertiesChange(Sender: TObject); procedure pgPaginasChanging(Sender: TObject; var AllowChange: Boolean); procedure frViewTotales1edtDescuentoPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure frViewTotales1edtIVAPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure frViewTotales1edtREPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); 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 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, cxControls; { 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.frViewTotales1edtDescuentoPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; Factura.DESCUENTO := DisplayValue; end; procedure TfEditorFacturaCliente.frViewTotales1edtIVAPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; Factura.IVA := DisplayValue; end; procedure TfEditorFacturaCliente.frViewTotales1edtREPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; Factura.RE := 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; ShowHourglassCursor; frViewDetallesFacturaCliente1.SaveGridStatus; // Para guardar estado del grid frViewDetallesFacturaCliente1.BeginUpdate; // Para que no se mueva el foco try FController.Guardar(FFactura); finally frViewDetallesFacturaCliente1.EndUpdate; frViewDetallesFacturaCliente1.RestoreGridStatus; HideHourglassCursor; end; Modified := False; end; procedure TfEditorFacturaCliente.ImprimirInterno; begin inherited; FController.Print(FFactura); end; procedure TfEditorFacturaCliente.pgPaginasChanging(Sender: TObject; var AllowChange: Boolean); begin inherited; if (not Assigned(FFactura)) or (FFactura.ID_CLIENTE = 0) then begin Showmessage('Antes debe elegir un cliente para esta factura'); AllowChange := False; end; 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); FViewFactura.Factura := FFactura; frViewDetallesFacturaCliente1.Detalles := FFactura.Detalles; frViewDetallesFacturaCliente1.Factura := FFactura; //Para poder sacar los descuento del articulos segun el cliente seleccionado end; end; end; procedure TfEditorFacturaCliente.SetViewFactura(const Value: IViewFacturaCliente); begin FViewFactura := Value; if Assigned(FViewFactura) and Assigned(Factura) then FViewFactura.Factura := Factura; end; end.