unit EMPRESAS;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,datos,principal, Vcl.StdCtrls,Vcl.Imaging.jpeg,
  Vcl.ExtCtrls, Data.DB, ZAbstractRODataset, ZAbstractDataset, ZDataset,
  Vcl.Grids, Vcl.DBGrids, Vcl.Mask, Vcl.DBCtrls, Vcl.ComCtrls, Vcl.ExtDlgs;

type
  Tfempresas = class(TForm)
    Panel7: TPanel;
    Label35: TLabel;
    btAcancelar: TButton;
    btAmodificar: TButton;
    btAborrar: TButton;
    btAnuevo: TButton;
    btAguardar: TButton;
    btAsalir: TButton;
    Panel1: TPanel;
    Panel2: TPanel;
    Paginas: TPageControl;
    TabSheet18: TTabSheet;
    Panel150: TPanel;
    Label100: TLabel;
    Label101: TLabel;
    Label102: TLabel;
    Label103: TLabel;
    Label104: TLabel;
    Label81: TLabel;
    Label82: TLabel;
    Label83: TLabel;
    Label84: TLabel;
    Label85: TLabel;
    Label86: TLabel;
    Label87: TLabel;
    Label89: TLabel;
    Label90: TLabel;
    Label91: TLabel;
    Label92: TLabel;
    Label178: TLabel;
    EmpActiva: TDBCheckBox;
    DBEdit40: TDBEdit;
    DBEdit41: TDBEdit;
    DBEdit42: TDBEdit;
    DBEdit43: TDBEdit;
    DBEdit44: TDBEdit;
    DBEdit45: TDBEdit;
    DBEdit46: TDBEdit;
    DBEdit47: TDBEdit;
    DBEdit48: TDBEdit;
    DBEdit49: TDBEdit;
    DBEdit50: TDBEdit;
    DBEdit58: TDBEdit;
    DBEdit59: TDBEdit;
    DBEdit60: TDBEdit;
    DBEdit61: TDBEdit;
    DBEdit62: TDBEdit;
    TabSheet37: TTabSheet;
    Panel116: TPanel;
    DBGrid56: TDBGrid;
    Panel171: TPanel;
    Label195: TLabel;
    BTSNCANCELAR: TButton;
    BTSNMODIFICAR: TButton;
    BTSNBORRAR: TButton;
    btSNnuevo: TButton;
    btSNguardar: TButton;
    Label1: TLabel;
    DBEdit1: TDBEdit;
    DBGrid1: TDBGrid;
    qempresas: TZQuery;
    dsqempresas: TDataSource;
    dsqseries: TDataSource;
    qseries: TZQuery;
    qserieside: TIntegerField;
    qseriesdescripcion: TWideStringField;
    qseriesnum_presupuesto: TIntegerField;
    qseriesnum_albaran: TIntegerField;
    qseriesnum_factura: TIntegerField;
    qseriesdefecto: TIntegerField;
    qseriesfechainicio: TDateField;
    qseriesfechafin: TDateField;
    qseriesplantillaalbaran: TWideStringField;
    qseriesplantillapresupuesto: TWideStringField;
    qseriesplantillafactura: TWideStringField;
    qaux: TZQuery;
    TabSheet1: TTabSheet;
    Panel3: TPanel;
    Label2: TLabel;
    btfpcancelar: TButton;
    btfpmodificar: TButton;
    btfpborrar: TButton;
    btfpnuevo: TButton;
    btfpguardar: TButton;
    Panel4: TPanel;
    DBGrid2: TDBGrid;
    gcrcheck: TDBCheckBox;
    dsqformaspago: TDataSource;
    qformas_pago: TZQuery;
    qformas_pagoid: TIntegerField;
    qformas_pagoide: TIntegerField;
    qformas_pagoids: TWideStringField;
    qformas_pagodescripcion: TWideStringField;
    qformas_pagoactivo: TIntegerField;
    qformas_pagodomiciliado: TIntegerField;
    combocentro: TDBLookupComboBox;
    comboserie: TDBLookupComboBox;
    qseriesid: TWideStringField;
    imgfotoe: TImage;
    Label325: TLabel;
    Button40: TButton;
    Button41: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    qempresasid: TIntegerField;
    qempresascif: TWideStringField;
    qempresasnombre: TWideStringField;
    qempresasdireccion: TWideStringField;
    qempresascodpost: TWideStringField;
    qempresaspoblacion: TWideStringField;
    qempresasprovincia: TWideStringField;
    qempresasemail: TWideStringField;
    qempresastelefono1: TWideStringField;
    qempresastelefono2: TWideStringField;
    qempresascontacto: TWideStringField;
    qempresasbanco: TWideStringField;
    qempresasactiva: TIntegerField;
    qempresastipo_iva: TFloatField;
    qempresaslogo: TBlobField;
    qempresascciban: TWideStringField;
    qempresasccentidad: TWideStringField;
    qempresasccoficina: TWideStringField;
    qempresasccdc: TWideStringField;
    qempresascccc: TWideStringField;
    DBEdit2: TDBEdit;
    Label3: TLabel;
    qempresasccbic: TWideStringField;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBGrid56DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure qseriesAfterPost(DataSet: TDataSet);
    procedure dsqseriesStateChange(Sender: TObject);
    procedure dsqempresasStateChange(Sender: TObject);
    procedure btAnuevoClick(Sender: TObject);
    procedure btAborrarClick(Sender: TObject);
    procedure btAmodificarClick(Sender: TObject);
    procedure btAguardarClick(Sender: TObject);
    procedure btAcancelarClick(Sender: TObject);
    procedure DBGrid56ColExit(Sender: TObject);
    procedure DBGrid56CellClick(Column: TColumn);
    procedure DBGrid2CellClick(Column: TColumn);
    procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure dsqformaspagoStateChange(Sender: TObject);
    procedure Button40Click(Sender: TObject);
    procedure dsqempresasDataChange(Sender: TObject; Field: TField);
    procedure btSNnuevoClick(Sender: TObject);
    procedure BTSNBORRARClick(Sender: TObject);
    procedure BTSNMODIFICARClick(Sender: TObject);
    procedure btSNguardarClick(Sender: TObject);
    procedure BTSNCANCELARClick(Sender: TObject);
    procedure qempresasBeforeDelete(DataSet: TDataSet);
    procedure qempresasBeforePost(DataSet: TDataSet);
    procedure qseriesBeforePost(DataSet: TDataSet);
    procedure qformas_pagoBeforePost(DataSet: TDataSet);
    procedure qseriesBeforeDelete(DataSet: TDataSet);
    procedure qformas_pagoBeforeDelete(DataSet: TDataSet);
    procedure btfpnuevoClick(Sender: TObject);
    procedure btfpborrarClick(Sender: TObject);
    procedure btfpmodificarClick(Sender: TObject);
    procedure btfpguardarClick(Sender: TObject);
    procedure btfpcancelarClick(Sender: TObject);
    procedure qformas_pagoAfterCancel(DataSet: TDataSet);
    procedure qseriesAfterCancel(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fempresas: Tfempresas;
const
  rojo=$00AAAAFF;
  amarillo=$00B9FFFF;
  verde=$00C7FBAA;
  azul=$00FFFFBB;
implementation

{$R *.dfm}

procedure Tfempresas.btAborrarClick(Sender: TObject);
begin
  qempresas.delete;
end;

procedure Tfempresas.btAcancelarClick(Sender: TObject);
begin
  qempresas.cancel;
end;

procedure Tfempresas.btAguardarClick(Sender: TObject);
begin
  qempresas.post;
end;

procedure Tfempresas.btAmodificarClick(Sender: TObject);
begin
  qempresas.edit;
end;

procedure Tfempresas.btAnuevoClick(Sender: TObject);
begin
  qempresas.append;
end;

procedure Tfempresas.btfpborrarClick(Sender: TObject);
begin
  qformas_pago.delete;
end;

procedure Tfempresas.btfpcancelarClick(Sender: TObject);
begin
  qformas_pago.cancel;
end;

procedure Tfempresas.btfpguardarClick(Sender: TObject);
begin
  qformas_pago.post;
end;

procedure Tfempresas.btfpmodificarClick(Sender: TObject);
begin
  qformas_pago.edit;
end;

procedure Tfempresas.btfpnuevoClick(Sender: TObject);
begin
  qformas_pago.Append;
end;

procedure Tfempresas.BTSNBORRARClick(Sender: TObject);
begin
  qseries.Delete;
end;

procedure Tfempresas.BTSNCANCELARClick(Sender: TObject);
begin
  qseries.cancel;
end;

procedure Tfempresas.btSNguardarClick(Sender: TObject);
begin
    qseries.post;
end;

procedure Tfempresas.BTSNMODIFICARClick(Sender: TObject);
begin
  qseries.edit;
end;

procedure Tfempresas.btSNnuevoClick(Sender: TObject);
begin
  qseries.Append;

end;

procedure Tfempresas.Button40Click(Sender: TObject);
var
  PanelDC: HDC;
  Jpg : TJPEGImage;
  bmp : Tbitmap;
  ext:string;
  imagen: tPicture;
  archivo:TMemorystream;

begin
  if OpenPictureDialog1.Execute then
  begin
    imagen := Tpicture.Create;
    bmp:= TBitmap.Create;
    jpg:=TJPEGImage.Create;

    try

       imgfotoe.Visible:=true;
       qempresas.edit;
       qempresaslogo.LoadFromFile(OpenPictureDialog1.FileName);
       qempresas.Post;
       ext:=ExtractFileExt(openpicturedialog1.FileName);
       If not DirectoryExists('c:\formagest\tmp') then CreateDir('c:\formagest\tmp');
       Deletefile('c:\formagest\tmp\empimg'+ext);
       imgfotoe.Picture:=nil;
       qempresaslogo.savetofile('c:\formagest\tmp\empimg'+ext);
       imgfotoe.Picture.LoadFromFile('c:\formagest\tmp\empimg'+ext);

    finally
      imagen.Free;
    end;
  end;

end;

procedure Tfempresas.DBGrid2CellClick(Column: TColumn);
begin
   if column.Field.FieldName ='activo' then
    begin
        if qformas_pagoactivo.asinteger=1 then
         begin
           qformas_pago.Edit;
           qformas_pagoactivo.Value:=0;
           qformas_pago.Post;
         end else
               begin
                 qformas_pago.Edit;
                 qformas_pagoactivo.Value:=1;
                 qformas_pago.Post;
                 qformas_pago.Refresh;
               end;
    end;
   if column.Field.FieldName ='domiciliado' then
    begin
        if qformas_pagodomiciliado.asinteger=1 then
         begin
           qformas_pago.Edit;
           qformas_pagodomiciliado.Value:=0;
           qformas_pago.Post;
         end else
               begin
                 qformas_pago.Edit;
                 qformas_pagodomiciliado.Value:=1;
                 qformas_pago.Post;
                 qformas_pago.Refresh;
               end;
    end;
    gcrcheck.Visible := false;
end;

procedure Tfempresas.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const IsChecked : array[Boolean] of Integer =
 (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState,imgindex,bmpwidth: Integer;
  DrawRect: TRect;
begin
if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'activo') then
     begin
       gcrcheck.Left := Rect.Left + DBgrid2.Left + 2;
       gcrcheck.Top := Rect.Top + DBgrid2.top + 2;
       gcrcheck.Width := Rect.Right - Rect.Left;
       gcrcheck.Height := Rect.Bottom - Rect.Top;
       gcrcheck.Visible := True;
     end;
    if (Column.Field.FieldName = 'domiciliado') then
     begin
       gcrcheck.Left := Rect.Left + DBgrid2.Left + 2;
       gcrcheck.Top := Rect.Top + DBgrid2.top + 2;
       gcrcheck.Width := Rect.Right - Rect.Left;
       gcrcheck.Height := Rect.Bottom - Rect.Top;
       gcrcheck.Visible := True;
     end;
end else
     begin

       if (Column.Field.FieldName = 'activo') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
         DBgrid2.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid2.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
       if (Column.Field.FieldName = 'domiciliado') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
         DBgrid2.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid2.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;
 if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = combocentro.DataField) then
    with combocentro do
    begin
      Left := Rect.Left + DBGrid2.Left + 2;
      Top := Rect.Top + DBGrid2.Top + 2;
      Width := Rect.Right - Rect.Left;
      Width := Rect.Right - Rect.Left;
      Height := Rect.Bottom - Rect.Top;
      Visible := True;
    end else combocentro.Visible:=false;
    if (Column.Field.FieldName = comboserie.DataField) then
    with comboserie do
    begin
      Left := Rect.Left + DBGrid2.Left + 2;
      Top := Rect.Top + DBGrid2.Top + 2;
      Width := Rect.Right - Rect.Left;
      Width := Rect.Right - Rect.Left;
      Height := Rect.Bottom - Rect.Top;
      Visible := True;
    end else comboserie.Visible:=false;

  end;

end;

procedure Tfempresas.DBGrid56CellClick(Column: TColumn);
begin
    if column.Field.FieldName ='defecto' then
    begin
        if qseriesdefecto.asinteger=1 then
         begin
           qseries.Edit;
           qseriesdefecto.Value:=0;
           qseries.Post;
           dbgrid56.selectedIndex:=0;
         end else
               begin
                 qseries.Edit;
                 qseriesdefecto.Value:=1;
                 qseries.Post;
                 qseries.Refresh;
                 dbgrid56.SelectedIndex:=0;
               end;
    end;
end;

procedure Tfempresas.DBGrid56ColExit(Sender: TObject);
begin
    gcrcheck.Visible := false;
end;

procedure Tfempresas.DBGrid56DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const IsChecked : array[Boolean] of Integer =
 (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState,imgindex,bmpwidth: Integer;
  DrawRect: TRect;
begin
if (gdFocused in State) then
begin

    if (Column.Field.FieldName = 'defecto') then
     begin
       gcrcheck.Left := Rect.Left + DBgrid56.Left + 2;
       gcrcheck.Top := Rect.Top + DBgrid56.top + 2;
       gcrcheck.Width := Rect.Right - Rect.Left;
       gcrcheck.Height := Rect.Bottom - Rect.Top;
       gcrcheck.Visible := True;
     end;
end else
     begin

       if (Column.Field.FieldName = 'defecto') then
       begin
         DrawRect:=Rect;
         InflateRect(DrawRect,-1,-1);
         if column.Field.Asinteger=0  then DrawState := ischecked[false];
         if column.Field.Asinteger=1  then DrawState := ischecked[true];
         DBgrid56.Canvas.FillRect(Rect);
         DrawFrameControl(DBgrid56.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState);
       end;
    end;
end;

procedure Tfempresas.dsqempresasDataChange(Sender: TObject; Field: TField);
begin
if qempresas.State in [dsbrowse] then
begin
      If not DirectoryExists('c:\formagest\tmp') then CreateDir('c:\formagest\tmp');
       Deletefile('c:\formagest\tmp\empimg.*');//+temp_fotosextension.AsString);
       imgfotoe.Picture:=nil;
       if  qempresaslogo.AsString<>'' then
       begin
         qempresaslogo.savetofile('c:\formagest\tmp\empimg.jpg');
         imgfotoe.Picture.LoadFromFile('c:\formagest\tmp\empimg.jpg');
         Deletefile('c:\formagest\tmp\empimg.jpg');
       end;
end;

end;

procedure Tfempresas.dsqempresasStateChange(Sender: TObject);
begin
    if qempresas.State in [dsedit,dsinsert] then
    begin
       panel150.Enabled:=true;
       dbedit41.SetFocus;
       btanuevo.enabled:=false;
       btaborrar.enabled:=false;
       btamodificar.enabled:=false;
       btaguardar.enabled:=true;
       btacancelar.enabled:=true;
    end;
    if qempresas.State in [dsbrowse] then
    begin
       panel150.Enabled:=false;
       btanuevo.enabled:=true;
       btaborrar.enabled:=true;
       btamodificar.enabled:=true;
       btaguardar.enabled:=false;
       btacancelar.enabled:=false;
    end;
end;

procedure Tfempresas.dsqformaspagoStateChange(Sender: TObject);
begin
    if qformas_pago.State in [dsedit,dsinsert] then
    begin
       btfpnuevo.enabled:=false;
       btfpborrar.enabled:=false;
       btfpmodificar.enabled:=false;
       btfpguardar.enabled:=true;
       btfpcancelar.enabled:=true;
    end;
    if qformas_pago.State in [dsbrowse] then
    begin
       btfpnuevo.enabled:=true;
       btfpborrar.enabled:=true;
       btfpmodificar.enabled:=true;
       btfpguardar.enabled:=false;
       btfpcancelar.enabled:=false;
    end;
end;

procedure Tfempresas.dsqseriesStateChange(Sender: TObject);
begin
    if qseries.State in [dsedit,dsinsert] then
    begin
       btsnnuevo.enabled:=false;
       btsnborrar.enabled:=false;
       btsnmodificar.enabled:=false;
       btsnguardar.enabled:=true;
       btsncancelar.enabled:=true;
    end;
    if qseries.State in [dsbrowse] then
    begin
       btsnnuevo.enabled:=true;
       btsnborrar.enabled:=true;
       btsnmodificar.enabled:=true;
       btsnguardar.enabled:=false;
       btsncancelar.enabled:=false;
    end;
end;

procedure Tfempresas.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    qempresas.close;
    qseries.close;
    qformas_pago.Close;
end;

procedure Tfempresas.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then Key :=9;
    end;
end;

procedure Tfempresas.FormKeyPress(Sender: TObject; var Key: Char);
var formatos:tformatsettings;
punto:string;
begin
    GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatos);
    punto:=formatos.DecimalSeparator;
    if punto=',' then
    begin
        key:=upcase(key);
        if (key='.') and (activecontrol is tdbedit) then
        begin
           if  (activecontrol as tdbedit).Field.DataType in [ftfloat,ftCurrency,ftbcd,ftfmtbcd] then key:=','
        end;
        if (key='.') and (activecontrol is tedit) then
        begin
           key:=','
        end;

        if (key='.') and (activecontrol is tdbgrid) then
        begin
            key:=',';
        end;
    end;
    if (activecontrol is tdbgrid) then
    begin
        if Key = #13 then Key :=#9;
    end;
    if (activecontrol is tdatetimepicker) then
    begin
        if Key = #13 then Key :=#9;
    end;
    if (activecontrol is tdbcheckbox) then
    begin
        if Key = #13 then Key :=#9;
    end;

    if (key=#13) then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;

end;

procedure Tfempresas.FormShow(Sender: TObject);
begin
    qempresas.Open;
    qseries.Open;
    qformas_pago.Open;
    paginas.Pages[0].Show;
end;

procedure Tfempresas.qempresasBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este centro?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tfempresas.qempresasBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qempresas.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta este centro?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar este centro?',true,true,true);
    case x of
        mrno: begin
                 qempresas.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;
    end;
end;

procedure Tfempresas.qformas_pagoAfterCancel(DataSet: TDataSet);
begin
    dbgrid2.selectedIndex:=0;
end;

procedure Tfempresas.qformas_pagoBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar esta froma de pago?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tfempresas.qformas_pagoBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qformas_pago.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta esta forma de pago?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar esta forma de pago?',true,true,true);
    case x of
        mrno: begin
                 qformas_pago.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;
    end;


end;

procedure Tfempresas.qseriesAfterCancel(DataSet: TDataSet);
begin
    dbgrid56.selectedIndex:=0;
end;

procedure Tfempresas.qseriesAfterPost(DataSet: TDataSet);
var pempresa:integer;
    pserie:string;
begin
    pempresa:=qserieside.AsInteger;
    pserie:=qseriesid.Asstring;
    if qseriesdefecto.AsInteger=1 then
    begin
      qaux.SQL.Clear;
      qaux.SQL.Add('update series set defecto=0 where ide=:EMPRESA and id<>:SERIE');
      qaux.prepare;
      qaux.ParamByName('EMPRESA').AsInteger:=pempresa;
      qaux.ParamByName('SERIE').Asstring:=pserie;
      qaux.ExecSQL;
    end;
    qseries.Refresh;
    dbgrid56.selectedIndex:=0;
end;

procedure Tfempresas.qseriesBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar esta serie?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tfempresas.qseriesBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qseries.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta esta serie?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar esta serie?',true,true,true);
    case x of
        mrno: begin
                 qseries.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 abort;
                 END;
    end;
end;

end.
