unit uEditorReciboProveedor; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uEditorDBItem, JvAppStorage, JvAppRegistryStorage, DB, uDADataTable, JvComponentBase, JvFormPlacement, ImgList, PngImageList, StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, TB2Item, TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvComponent, JvNavigationPane, uIEditorReciboProveedor, uCustomView, uViewBase, uViewReciboProveedor, uRecibosProveedorController, uBizRecibosProveedor, uViewPagosProveedor, dxLayoutLookAndFeels; type TfEditorReciboProveedor = class(TfEditorDBItem, IEditorReciboProveedor) DADataSource1: TDADataSource; frViewReciboProveedor1: TfrViewReciboProveedor; frViewPagosProveedor1: TfrViewPagosProveedor; procedure FormShow(Sender: TObject); procedure dsDataTableDataChange(Sender: TObject; Field: TField); procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction); procedure frViewReciboProveedor1eImportePropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure frViewPagosProveedor1actAnadirExecute(Sender: TObject); procedure frViewPagosProveedor1actEliminarExecute(Sender: TObject); procedure frViewPagosProveedor1actEliminarUpdate(Sender: TObject); procedure frViewPagosProveedor1actModificarUpdate(Sender: TObject); procedure frViewPagosProveedor1actModificarExecute(Sender: TObject); procedure HabilitarRecibo; procedure DeshabilitarRecibo; procedure JvFormStorageRestorePlacement(Sender: TObject); procedure JvFormStorageSavePlacement(Sender: TObject); private FController : IRecibosProveedorController; FRecibo: IBizRecibosProveedor; FViewRecibo : IViewReciboProveedor; FImporteRestante : Double; function GetController : IRecibosProveedorController; procedure SetController (const Value : IRecibosProveedorController); virtual; function GetRecibo: IBizRecibosProveedor; procedure SetRecibo(const Value: IBizRecibosProveedor); function GetViewRecibo: IViewReciboProveedor; procedure SetViewRecibo(const Value: IViewReciboProveedor); property ViewRecibo: IViewReciboProveedor read GetViewRecibo write SetViewRecibo; protected procedure PrevisualizarInterno; override; procedure ImprimirInterno; override; procedure GuardarInterno; override; procedure PonerTitulos(const ATitulo: string = ''); override; public property Recibo: IBizRecibosProveedor read GetRecibo write SetRecibo; constructor Create(AOwner: TComponent); override; end; implementation uses schRecibosProveedorClient_Intf, uEditorFechaPagoProveedor, uEditorBase; {$R *.dfm} constructor TfEditorReciboProveedor.Create(AOwner: TComponent); begin inherited; FImporteRestante := 0; pgPaginas.ActivePageIndex := 0; ViewRecibo := frViewReciboProveedor1; end; procedure TfEditorReciboProveedor.CustomEditorClose(Sender: TObject; var Action: TCloseAction); begin inherited; dsDataTable.DataTable := NIL; FViewRecibo := NIL; FRecibo := NIL; end; procedure TfEditorReciboProveedor.DeshabilitarRecibo; begin frViewReciboProveedor1.eReferenciaProveedor.Enabled := False; frViewReciboProveedor1.edtFechaVencimiento.Enabled := False; frViewReciboProveedor1.eImporte.Enabled := False; frViewReciboProveedor1.eOtrosGastos.Enabled := False; end; procedure TfEditorReciboProveedor.dsDataTableDataChange(Sender: TObject; Field: TField); begin inherited; if Assigned(FRecibo) and (not (FRecibo.DataTable.Fetching) or not (FRecibo.DataTable.Opening) or not (FRecibo.DataTable.Closing)) then PonerTitulos; end; procedure TfEditorReciboProveedor.FormShow(Sender: TObject); begin inherited; if not Assigned(FViewRecibo) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(Recibo) then raise Exception.Create('No hay ningún almacén asignado'); Recibo.DataTable.Active := True; end; procedure TfEditorReciboProveedor.frViewPagosProveedor1actAnadirExecute(Sender: TObject); begin inherited; //En el caso de haber añadido el pago del recibo ya no podremos modificarlo if FController.AnadirPago(Recibo) then DeshabilitarRecibo //Podremos modificar si anulamos el pago mediante una devolución else HabilitarRecibo; end; procedure TfEditorReciboProveedor.frViewPagosProveedor1actEliminarExecute(Sender: TObject); begin inherited; //En el caso de eliminar un pago el recibo queda como devuelto o pendiente y por tanto se puede modificar if (FController.EliminarPago(Recibo)) then begin FRecibo.Edit; if FRecibo.Pagos.DataTable.RecordCount > 0 then FRecibo.SITUACION := CTE_DEVUELTO else FRecibo.SITUACION := CTE_PENDIENTE; HabilitarRecibo; end //No podremos modificar si anulamos una devolución porque el recibo queda cobrado else begin FRecibo.Edit; FRecibo.SITUACION := CTE_PAGADO; DeshabilitarRecibo; end; end; procedure TfEditorReciboProveedor.frViewPagosProveedor1actEliminarUpdate(Sender: TObject); begin if Assigned(FRecibo) and Assigned(FRecibo.Pagos) then frViewPagosProveedor1.actEliminar.Enabled := (FRecibo.Pagos.DataTable.RecordCount > 0) end; procedure TfEditorReciboProveedor.frViewPagosProveedor1actModificarExecute(Sender: TObject); begin inherited; FController.ModificarPago(Recibo); end; procedure TfEditorReciboProveedor.frViewPagosProveedor1actModificarUpdate(Sender: TObject); begin inherited; if Assigned(FRecibo) and Assigned(FRecibo.Pagos) then frViewPagosProveedor1.actModificar.Enabled := (FRecibo.Pagos.DataTable.RecordCount > 0); end; procedure TfEditorReciboProveedor.frViewReciboProveedor1eImportePropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; if (DisplayValue > frViewReciboProveedor1.eImporte.DataBinding.Field.Value) then begin DisplayValue := frViewReciboProveedor1.eImporte.DataBinding.Field.Value; ErrorText := 'El importe debe ser menor o igual que el actual'; Error := True; end; end; function TfEditorReciboProveedor.GetController: IRecibosProveedorController; begin Result := FController; end; function TfEditorReciboProveedor.GetRecibo: IBizRecibosProveedor; begin Result := FRecibo; end; function TfEditorReciboProveedor.GetViewRecibo: IViewReciboProveedor; begin Result := FViewRecibo; end; procedure TfEditorReciboProveedor.GuardarInterno; begin inherited; FController.Guardar(FRecibo); Modified := False; end; procedure TfEditorReciboProveedor.HabilitarRecibo; begin //Si el recibo tiene sociado una remesa no se podrá cambiar nada frViewReciboProveedor1.eReferenciaProveedor.Enabled := True; frViewReciboProveedor1.edtFechaVencimiento.Enabled := True; frViewReciboProveedor1.eImporte.Enabled := True; frViewReciboProveedor1.eOtrosGastos.Enabled := True; end; procedure TfEditorReciboProveedor.ImprimirInterno; begin inherited; FController.Print(FRecibo); end; procedure TfEditorReciboProveedor.JvFormStorageRestorePlacement(Sender: TObject); begin inherited; frViewPagosProveedor1.ListaPagosProveedor.ActiveView.RestoreFromRegistry(JvAppRegistryStorage.Root); end; procedure TfEditorReciboProveedor.JvFormStorageSavePlacement(Sender: TObject); begin inherited; frViewPagosProveedor1.ListaPagosProveedor.ActiveView.StoreToRegistry(JvAppRegistryStorage.Root); end; procedure TfEditorReciboProveedor.PonerTitulos(const ATitulo: string); var FTitulo : String; begin if Assigned(Recibo) then begin if Recibo.EsNuevo then FTitulo := 'Nuevo recibo de proveedor' else FTitulo := 'Recibo de proveedor'; end; inherited PonerTitulos(FTitulo); end; procedure TfEditorReciboProveedor.PrevisualizarInterno; begin inherited; FController.Preview(FRecibo); end; procedure TfEditorReciboProveedor.SetController(const Value: IRecibosProveedorController); begin FController := Value; // if Assigned(FController) then // (ViewRecibo as IViewReciboProveedor).Controller := (FController as IRecibosProveedorController); end; procedure TfEditorReciboProveedor.SetRecibo(const Value: IBizRecibosProveedor); begin FRecibo := Value; dsDataTable.DataTable := FRecibo.DataTable; if Assigned(FViewRecibo) and Assigned(Recibo) then begin FViewRecibo.Recibo := Recibo; frViewPagosProveedor1.Pagos := Recibo.Pagos; if (FRecibo.SITUACION = CTE_PAGADO) then DeshabilitarRecibo else HabilitarRecibo; end; end; procedure TfEditorReciboProveedor.SetViewRecibo(const Value: IViewReciboProveedor); begin FViewRecibo := Value; if Assigned(FViewRecibo) and Assigned(Recibo) then FViewRecibo.Recibo := Recibo; end; end.