unit uViewPeriodoFechas; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxGraphics, cxEdit, cxDropDownEdit, cxCalendar, StdCtrls, cxControls, cxContainer, cxTextEdit, cxMaskEdit, TBXDkPanels, cxEditRepositoryItems, dxLayoutControl, dxLayoutLookAndFeels, uViewBase, Mask, JvExMask, JvToolEdit, TB2Dock, uViewParametrosInforme, uIViewParametrosInforme; type IViewPeriodoFechas = interface(IViewParametrosInforme) ['{793084E2-873E-4C57-8BD6-9087816CCF3A}'] end; TTipoFecha = (TFecha, TFechaVencimiento); TfrViewPeriodoFechas = class(TfrViewParametrosInforme, IViewPeriodoFechas) cxRepository: TcxEditRepository; cxRepositoryPeriodos: TcxEditRepositoryComboBoxItem; edtFechaIni: TcxDateEdit; edtFechaFin: TcxDateEdit; TBXLabel2: TTBXLabel; TBXAlignmentPanel2: TTBXAlignmentPanel; Label1: TLabel; Label2: TLabel; Label3: TLabel; TBXAlignmentPanel3: TTBXAlignmentPanel; Label4: TLabel; Label5: TLabel; Label6: TLabel; edtFechaVenFin: TcxDateEdit; edtFechaVenIni: TcxDateEdit; cbPeriodo: TcxComboBox; cbPeriodo2: TcxComboBox; procedure cbPeriodoPropertiesChange(Sender: TObject); procedure edtFechaIni2PropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure edtFechaFinPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure cbPeriodo2PropertiesChange(Sender: TObject); procedure edtFechaVenIniPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure edtFechaVenFinPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); private function GetFechaFinal: Variant; function GetFechaInicial: Variant; procedure SetFechaFinal(const Value: Variant); procedure SetFechaInicial(const Value: Variant); function GetFechaVenFinal: Variant; function GetFechaVenInicial: Variant; procedure SetFechaVenFinal(const Value: Variant); procedure SetFechaVenInicial(const Value: Variant); public procedure Hoy(const ATipoFecha: TTipoFecha); procedure Ayer(const ATipoFecha: TTipoFecha); procedure EstaSemana(const ATipoFecha: TTipoFecha); procedure EsteMes(const ATipoFecha: TTipoFecha); procedure EsteAno(const ATipoFecha: TTipoFecha); procedure Ultimos7dias(const ATipoFecha: TTipoFecha); procedure Ultimos30dias(const ATipoFecha: TTipoFecha); procedure Ultimos3meses(const ATipoFecha: TTipoFecha); procedure MesAnterior(const ATipoFecha: TTipoFecha); procedure AnoAnterior(const ATipoFecha: TTipoFecha); procedure Personalizado(const ATipoFecha: TTipoFecha); property FechaInicial : Variant read GetFechaInicial write SetFechaInicial; property FechaFinal : Variant read GetFechaFinal write SetFechaFinal; property FechaVenInicial : Variant read GetFechaVenInicial write SetFechaVenInicial; property FechaVenFinal : Variant read GetFechaVenFinal write SetFechaVenFinal; constructor Create(AOwner: TComponent); override; end; implementation uses DateUtils; {$R *.dfm} procedure TfrViewPeriodoFechas.AnoAnterior(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := StartOfTheYear(IncYear(Today, -1)); edtFechaFin.Date := EndOfTheYear(IncYear(Today, -1)); end; TFechaVencimiento: begin edtFechaVenIni.Date := StartOfTheYear(IncYear(Today, -1)); edtFechaVenFin.Date := EndOfTheYear(IncYear(Today, -1)); end; end; end; procedure TfrViewPeriodoFechas.Ayer(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := Yesterday; edtFechaFin.Date := Yesterday; end; TFechaVencimiento: begin edtFechaVenIni.Date := Yesterday; edtFechaVenFin.Date := Yesterday; end; end; end; procedure TfrViewPeriodoFechas.EstaSemana(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := StartOfTheWeek(Today); edtFechaFin.Date := EndOfTheWeek(Today); end; TFechaVencimiento: begin edtFechaVenIni.Date := StartOfTheWeek(Today); edtFechaVenFin.Date := EndOfTheWeek(Today); end; end; end; procedure TfrViewPeriodoFechas.EsteAno(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := StartOfTheYear(Today); edtFechaFin.Date := EndOfTheYear(Today); end; TFechaVencimiento: begin edtFechaVenIni.Date := StartOfTheYear(Today); edtFechaVenFin.Date := EndOfTheYear(Today); end; end; end; procedure TfrViewPeriodoFechas.EsteMes(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := StartOfTheMonth(Today); edtFechaFin.Date := EndOfTheMonth(Today); end; TFechaVencimiento: begin edtFechaVenIni.Date := StartOfTheMonth(Today); edtFechaVenFin.Date := EndOfTheMonth(Today); end; end; end; function TfrViewPeriodoFechas.GetFechaFinal: Variant; begin Result := edtFechaFin.EditValue; end; function TfrViewPeriodoFechas.GetFechaInicial: Variant; begin Result := edtFechaIni.EditValue; end; function TfrViewPeriodoFechas.GetFechaVenFinal: Variant; begin Result := edtFechaVenFin.EditValue; end; function TfrViewPeriodoFechas.GetFechaVenInicial: Variant; begin Result := edtFechaVenIni.EditValue; end; procedure TfrViewPeriodoFechas.Hoy(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := Today; edtFechaFin.Date := Today; end; TFechaVencimiento: begin edtFechaVenIni.Date := Today; edtFechaVenFin.Date := Today; end; end; end; procedure TfrViewPeriodoFechas.MesAnterior(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := StartOfTheMonth(IncMonth(Today, -1)); edtFechaFin.Date := EndOfTheMonth(IncMonth(Today, -1)); end; TFechaVencimiento: begin edtFechaVenIni.Date := StartOfTheMonth(IncMonth(Today, -1)); edtFechaVenFin.Date := EndOfTheMonth(IncMonth(Today, -1)); end; end; end; procedure TfrViewPeriodoFechas.Personalizado(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.SetFocus; end; TFechaVencimiento: begin edtFechaVenIni.SetFocus; end; end; end; procedure TfrViewPeriodoFechas.SetFechaFinal(const Value: Variant); begin edtFechaFin.EditValue := Value; end; procedure TfrViewPeriodoFechas.SetFechaInicial(const Value: Variant); begin edtFechaIni.EditValue := Value; end; procedure TfrViewPeriodoFechas.SetFechaVenFinal(const Value: Variant); begin edtFechaVenFin.EditValue := Value; end; procedure TfrViewPeriodoFechas.SetFechaVenInicial(const Value: Variant); begin edtFechaVenIni.EditValue := Value; end; procedure TfrViewPeriodoFechas.Ultimos30dias(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := IncDay(Today, -30); edtFechaFin.Date := Today end; TFechaVencimiento: begin edtFechaVenIni.Date := IncDay(Today, -30); edtFechaVenFin.Date := Today end; end; end; procedure TfrViewPeriodoFechas.Ultimos3meses(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := IncMonth(Today, -3); edtFechaFin.Date := Today end; TFechaVencimiento: begin edtFechaVenIni.Date := IncMonth(Today, -3); edtFechaVenFin.Date := Today end; end; end; procedure TfrViewPeriodoFechas.Ultimos7dias(const ATipoFecha: TTipoFecha); begin case ATipoFecha of TFecha: begin edtFechaIni.Date := IncDay(Today, -7); edtFechaFin.Date := Today end; TFechaVencimiento: begin edtFechaVenIni.Date := IncDay(Today, -7); edtFechaVenFin.Date := Today end; end; end; procedure TfrViewPeriodoFechas.cbPeriodo2PropertiesChange(Sender: TObject); begin case (Sender as TcxComboBox).ItemIndex of 0 : Hoy(TFechaVencimiento); 1 : Ayer(TFechaVencimiento); 2 : EstaSemana(TFechaVencimiento); 3 : EsteMes(TFechaVencimiento); 4 : EsteAno(TFechaVencimiento); 5 : Ultimos7dias(TFechaVencimiento); 6 : Ultimos30dias(TFechaVencimiento); 7 : Ultimos3meses(TFechaVencimiento); 8 : MesAnterior(TFechaVencimiento); 9 : AnoAnterior(TFechaVencimiento); else Personalizado(TFechaVencimiento); end; end; procedure TfrViewPeriodoFechas.cbPeriodoPropertiesChange(Sender: TObject); begin case (Sender as TcxComboBox).ItemIndex of 0 : Hoy(TFecha); 1 : Ayer(TFecha); 2 : EstaSemana(TFecha); 3 : EsteMes(TFecha); 4 : EsteAno(TFecha); 5 : Ultimos7dias(TFecha); 6 : Ultimos30dias(TFecha); 7 : Ultimos3meses(TFecha); 8 : MesAnterior(TFecha); 9 : AnoAnterior(TFecha); else Personalizado(TFecha); end; end; constructor TfrViewPeriodoFechas.Create(AOwner: TComponent); begin inherited; cbPeriodo.ItemIndex := -1; cbPeriodo2.ItemIndex := -1; EsteMes(TFecha); end; procedure TfrViewPeriodoFechas.edtFechaIni2PropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; if Length(VarToStr(DisplayValue)) > 0 then begin if DisplayValue <> edtFechaIni.Date then cbPeriodo.ItemIndex := 12; if DisplayValue > edtFechaFin.Date then begin edtFechaFin.EditText := DisplayValue; edtFechaFin.ValidateEdit(True); end; end; end; procedure TfrViewPeriodoFechas.edtFechaVenFinPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin if Length(VarToStr(DisplayValue)) > 0 then begin if DisplayValue <> edtFechaVenFin.Date then cbPeriodo2.ItemIndex := 12; if DisplayValue < edtFechaVenIni.Date then begin edtFechaVenIni.EditText := DisplayValue; edtFechaVenIni.ValidateEdit(True); end; end; end; procedure TfrViewPeriodoFechas.edtFechaVenIniPropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; if Length(VarToStr(DisplayValue)) > 0 then begin if DisplayValue <> edtFechaVenIni.Date then cbPeriodo2.ItemIndex := 12; if DisplayValue > edtFechaVenFin.Date then begin edtFechaVenFin.EditText := DisplayValue; edtFechaVenFin.ValidateEdit(True); end; end; end; procedure TfrViewPeriodoFechas.edtFechaFinPropertiesValidate( Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); begin inherited; if Length(VarToStr(DisplayValue)) > 0 then begin if DisplayValue <> edtFechaFin.Date then cbPeriodo.ItemIndex := 12; if DisplayValue < edtFechaIni.Date then begin edtFechaIni.EditText := DisplayValue; edtFechaIni.ValidateEdit(True); end; end; end; end.