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, uViewContenido, uViewTotales, StdCtrls, pngimage, AppEvnts, uBizFacturasCliente, uViewDetallesNormales, uViewDetallesFacturaCliente, uViewDetallesFamilias, dxLayoutLookAndFeels, JvComponentBase, dxLayoutControl; type IEditorFacturaCliente = interface(IEditorDBItem) ['{6989A930-FB5B-47E7-A836-7EEB8108128F}'] function GetFacturaCliente: IBizFacturasCliente; procedure SetFacturaCliente(const Value: IBizFacturasCliente); property FacturaCliente: IBizFacturasCliente read GetFacturaCliente write SetFacturaCliente; end; TfEditorFacturaCliente = class(TfEditorDBItem, IEditorFacturaCliente) pagContenido: TTabSheet; frViewDetallesFacturaCliente1: TfrViewDetallesFacturaCliente; frViewFacturaCliente1: TfrViewFacturaCliente; TBXSeparatorItem14: TTBXSeparatorItem; TBXSubmenuItem2: TTBXSubmenuItem; TBXItem33: TTBXItem; frViewTotales1: TfrViewTotales; procedure actEliminarExecute(Sender: TObject); procedure dsDataTableDataChange(Sender: TObject; Field: TField); procedure FormShow(Sender: TObject); override; procedure frViewDatosYSeleccionContacto21edtlNombrePropertiesChange(Sender: TObject); procedure pgPaginasChanging(Sender: TObject; var AllowChange: Boolean); procedure frViewDatosFacturaCliente1eTipoPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); private FFacturaCliente: IBizFacturasCliente; FViewFacturaCliente: IViewFacturaCliente; protected function GetFacturaCliente: IBizFacturasCliente; function GetViewFactura: IViewFacturaCliente; procedure SetFacturaCliente(const Value: IBizFacturasCliente); virtual; procedure SetViewFactura(const Value: IViewFacturaCliente); property ViewFacturaCliente: IViewFacturaCliente read GetViewFactura write SetViewFactura; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property FacturaCliente: IBizFacturasCliente read GetFacturaCliente write SetFacturaCliente; end; var fEditorFacturaCliente: TfEditorFacturaCliente; implementation uses uEditorUtils, uDataModuleFacturasCliente, uBizImportesDetalleBase, schFacturasClienteClient_Intf, uExceptions, LiteralesFacturasCliente, cxImageComboBox, cxDBEdit; {$R *.dfm} function ShowEditorFacturaCliente (ABizObject : TDADataTableRules) : TModalResult; var AEditor: TfEditorFacturaCliente; begin AEditor := TfEditorFacturaCliente.Create(Application); try AEditor.FacturaCliente := (ABizObject as IBizFacturasCliente); Result := AEditor.ShowModal; finally AEditor.Release; end; end; { TfEditorFacturaCliente } { **************************** TfEditorFacturaCliente **************************** } constructor TfEditorFacturaCliente.Create(AOwner: TComponent); begin inherited; // ViewFacturaCliente := CreateView(TfrViewFacturaCliente) as IViewFacturaCliente; pgPaginas.ActivePageIndex := 0; ViewFacturaCliente := frViewFacturaCliente1; end; destructor TfEditorFacturaCliente.Destroy; begin FViewFacturaCliente := NIL; FFacturaCliente := NIL; inherited; end; procedure TfEditorFacturaCliente.actEliminarExecute(Sender: TObject); begin if (Application.MessageBox(PChar(msgLitBorrar), 'Atención', MB_YESNO) = IDYES) then inherited; end; procedure TfEditorFacturaCliente.dsDataTableDataChange(Sender: TObject; Field: TField); begin inherited; if Assigned(FFacturaCliente) and (not (FFacturaCliente.DataTable.Fetching) or not (FFacturaCliente.DataTable.Opening) or not (FFacturaCliente.DataTable.Closing)) then begin end; end; procedure TfEditorFacturaCliente.FormShow(Sender: TObject); begin inherited; if not Assigned(FViewFacturaCliente) then raise Exception.Create('No hay ninguna vista asignada'); if not Assigned(FacturaCliente) then raise Exception.Create('No hay ningún albarán asignado'); FacturaCliente.DataTable.Active := True; // FViewFacturaCliente.ShowEmbedded(pagGeneral); // FViewFacturaCliente.SetFocus; end; function TfEditorFacturaCliente.GetFacturaCliente: IBizFacturasCliente; begin Result := FFacturaCliente; end; function TfEditorFacturaCliente.GetViewFactura: IViewFacturaCliente; begin Result := FViewFacturaCliente; end; procedure TfEditorFacturaCliente.SetFacturaCliente(const Value: IBizFacturasCliente); begin FFacturaCliente := Value; if Assigned(FFacturaCliente) then begin dsDataTable.DataTable := FFacturaCliente.DataTable; frViewTotales1.DADataSource.DataTable := FFacturaCliente.DataTable; frViewDetallesFacturaCliente1.DADataSource.DataTable := FFacturaCliente.Detalles.DataTable; if Assigned(FViewFacturaCliente) then FViewFacturaCliente.FacturaCliente := FFacturaCliente; end; end; procedure TfEditorFacturaCliente.SetViewFactura(const Value: IViewFacturaCliente); begin FViewFacturaCliente := Value; if Assigned(FViewFacturaCliente) and Assigned(FacturaCliente) then FViewFacturaCliente.FacturaCliente := FacturaCliente; end; procedure TfEditorFacturaCliente.frViewDatosYSeleccionContacto21edtlNombrePropertiesChange( Sender: TObject); begin inherited; if Length(frViewFacturaCliente1.frViewDatosYSeleccionContacto21.edtlNombre.Text) = 0 then JvNavPanelHeader.Caption := 'Nueva factura de cliente' else JvNavPanelHeader.Caption := 'Factura de ' + frViewFacturaCliente1.frViewDatosYSeleccionContacto21.edtlNombre.Text; Caption := JvNavPanelHeader.Caption; end; procedure TfEditorFacturaCliente.pgPaginasChanging(Sender: TObject; var AllowChange: Boolean); begin if (FFacturaCliente.Cliente.NOMBRE = '') then begin AllowChange := False; showmessage(msgLitClienteObligatorio); end; end; procedure TfEditorFacturaCliente.frViewDatosFacturaCliente1eTipoPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); var i : Integer; ClaseFacturaAntes: String; ClaseFacturaDespues: String; begin with (Sender as TcxDBImageComboBox).Properties.Items do begin i := 0; while (Items[i].Description <> DisplayValue) do inc(i); ClaseFacturaAntes := FacturaCliente.CLASEFACTURA; ClaseFacturaDespues := Items[i].Value; end; //Para establecer si se ve o no situación de factura if (ClaseFacturaDespues = CTE_PROFORMA) then frViewFacturaCliente1.frViewDatosFacturaCliente1.dxLayoutControl1Item12.Visible := false else frViewFacturaCliente1.frViewDatosFacturaCliente1.dxLayoutControl1Item12.Visible := true; //CAMBIO DE SIGNO DE LA FACTURA if (ClaseFacturaDespues = CTE_ABONO) then FacturaCliente.cambiarSigno else if (ClaseFacturaAntes = CTE_ABONO) then FacturaCliente.cambiarSigno; //CAMBIO DE REFERENCIA //En el caso de cabiar una factura proforma a normal o abono se le debe asignar //una referencia nueva, y viceversa if (ClaseFacturaDespues = CTE_PROFORMA) then begin FacturaCliente.setReferencia(ClaseFacturaDespues); showmessage(msgLitCambioReferencia) end //En caso de que el tipo anterior no sea proforma no se cambia ya que de normal //a abono y al revés no se requiere la reasignacion de referencia else if (ClaseFacturaAntes = CTE_PROFORMA) then begin FacturaCliente.setReferencia(ClaseFacturaDespues); showmessage(msgLitCambioReferencia) end //Importante no tocar ya que si no salimos no coge el nuevo valor y falla en //el siguiente cambio que se produzca // frViewFacturaCliente1.frViewDatosFacturaCliente1.eReferencia.SetFocus; end; initialization RegisterEditor(IBizFacturasCliente, ShowEditorFacturaCliente, etItem); finalization end.