unit articulos;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Vcl.StdCtrls, Vcl.DBCtrls, Vcl.Mask, Vcl.ComCtrls, Vcl.Grids, Vcl.DBGrids,
  Vcl.ExtCtrls,DATA.DB, ZAbstractRODataset, ZDataset, ZAbstractDataset,
  Vcl.ImgList;

type
  Tfarticulos = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel5: TPanel;
    Label1: TLabel;
    todosarticulos: TCheckBox;
    tbuscar: TEdit;
    DBGrid1: TDBGrid;
    particulos: TPanel;
    pdatosarticulos: TPanel;
    Panel14: TPanel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    DBCheckBox2: TDBCheckBox;
    DBEdit1: TDBEdit;
    DBEdit10: TDBEdit;
    DBEdit11: TDBEdit;
    DBEdit12: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit9: TDBEdit;
    DBEdit22: TDBEdit;
    Detallesarticulos: TPageControl;
    TAlbaranes: TTabSheet;
    Panel10: TPanel;
    Label32: TLabel;
    btALcancelar: TButton;
    btALmodificar: TButton;
    btALborrar: TButton;
    btALnuevo: TButton;
    btALguardar: TButton;
    DBGrid7: TDBGrid;
    TFacturas: TTabSheet;
    Panel11: TPanel;
    Label31: TLabel;
    btFcancelar: TButton;
    btFmodificar: TButton;
    btFborrar: TButton;
    btFnuevo: TButton;
    btFguardar: TButton;
    DBGrid8: TDBGrid;
    Panel4: TPanel;
    Label36: TLabel;
    btAcancelar: TButton;
    btAmodificar: TButton;
    btAborrar: TButton;
    btAnuevo: TButton;
    btAguardar: TButton;
    qfamilias: TZReadOnlyQuery;
    qfamiliasidempresa: TIntegerField;
    qfamiliasid: TIntegerField;
    qfamiliasdescripcion: TWideStringField;
    DBLookupComboBox1: TDBLookupComboBox;
    dsqfamilias: TDataSource;
    qfamiliasactivo: TIntegerField;
    DBMemo1: TDBMemo;
    Label3: TLabel;
    DBCheckBox1: TDBCheckBox;
    qproveedores: TZReadOnlyQuery;
    dsqproveedores: TDataSource;
    qtipoivas: TZReadOnlyQuery;
    dsqtiposiva: TDataSource;
    qproveedoresid: TIntegerField;
    qproveedoresIdempresa: TIntegerField;
    qproveedoresnif: TWideStringField;
    qproveedoresnombre: TWideStringField;
    qproveedoresnombre_corto: TWideStringField;
    qtipoivasid: TIntegerField;
    qtipoivasdescripcion: TWideStringField;
    qtipoivastipo: TIntegerField;
    DBLookupComboBox2: TDBLookupComboBox;
    DBLookupComboBox3: TDBLookupComboBox;
    qaux: TZReadOnlyQuery;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    DBCheckBox3: TDBCheckBox;
    DBEdit2: TDBEdit;
    Label15: TLabel;
    Label16: TLabel;
    DBEdit5: TDBEdit;
    Label17: TLabel;
    qlistadoproveedores: TZReadOnlyQuery;
    qlistadoproveedoresidproveedor: TIntegerField;
    qlistadoproveedoresnombre: TWideStringField;
    qlistadoproveedoresid: TWideStringField;
    qlistadoproveedoresid_propio: TWideStringField;
    qlistadoproveedoresult_precio: TFloatField;
    qlistadoproveedoresidempresa: TIntegerField;
    DBGrid2: TDBGrid;
    dsqlistproveedores: TDataSource;
    DBCheckBox4: TDBCheckBox;
    qcompras: TZReadOnlyQuery;
    qcomprasnombre: TWideStringField;
    qcomprasdocumento: TWideStringField;
    qcomprasfecha: TDateField;
    qcomprascodigo: TWideStringField;
    qcomprasdescripcion: TWideStringField;
    qcomprasid_propio: TWideStringField;
    qcomprascantidad: TFloatField;
    qcomprasprecio: TFloatField;
    qcomprasidempresa: TIntegerField;
    qcomprasdesc_propia: TWideStringField;
    DBGrid3: TDBGrid;
    dsqcompras: TDataSource;
    Panel3: TPanel;
    Button3: TButton;
    Button4: TButton;
    qcomprasstock: TFloatField;
    qarticulosfinal: TZReadOnlyQuery;
    qarticulosfinalidempresa: TIntegerField;
    qarticulosfinalid: TIntegerField;
    qarticulosfinalcodigo: TWideStringField;
    qarticulosfinaldescripcion: TWideStringField;
    qarticulosfinalactivo: TIntegerField;
    qarticulosfinalpreciocoste: TFloatField;
    dsqarticulosfinal: TDataSource;
    dtarticulosfinal: TZQuery;
    dtarticulosfinalidempresa: TIntegerField;
    dtarticulosfinalid: TIntegerField;
    dtarticulosfinalcodigo: TWideStringField;
    dtarticulosfinaldescripcion: TWideStringField;
    dtarticulosfinalfamilia: TIntegerField;
    dtarticulosfinalprovhab: TIntegerField;
    dtarticulosfinaltipoiva: TIntegerField;
    dtarticulosfinalpreciocoste: TFloatField;
    dtarticulosfinalmargen: TFloatField;
    dtarticulosfinalbeneficio: TFloatField;
    dtarticulosfinalpvp: TFloatField;
    dtarticulosfinalstock: TFloatField;
    dtarticulosfinalult_preciocompra: TFloatField;
    dtarticulosfinalfacturable: TIntegerField;
    dtarticulosfinalobservaciones: TWideStringField;
    dtarticulosfinalimagen: TBlobField;
    dtarticulosfinalactvo: TIntegerField;
    dtarticulosfinalvalor_almacen: TFloatField;
    dtarticulosfinalstock_minimo: TFloatField;
    dtarticulosfinalavisar_stock: TIntegerField;
    dtarticulosfinalcontrolar_traza: TIntegerField;
    dsarticulosfinal: TDataSource;
    DBEdit6: TDBEdit;
    Label18: TLabel;
    dtarticulosfinalpeso: TFloatField;
    ZQuery1: TZQuery;
    ZQuery1id: TIntegerField;
    ZQuery1idempresa: TIntegerField;
    ZQuery1identrada: TIntegerField;
    ZQuery1idproveedor: TIntegerField;
    ZQuery1codigo: TWideStringField;
    ZQuery1id_propio: TWideStringField;
    ZQuery1descripcion: TWideStringField;
    ZQuery1lote: TWideStringField;
    ZQuery1cantidad: TFloatField;
    ZQuery1stock: TFloatField;
    ZQuery1precio: TFloatField;
    ZQuery1tipo_iva: TIntegerField;
    ZQuery1base: TFloatField;
    ZQuery1total: TFloatField;
    Label19: TLabel;
    DBEdit7: TDBEdit;
    dtarticulosfinaldescripcion_doc: TWideStringField;
    qcompraslote: TWideStringField;
    dtarticulosfinalinventariable: TIntegerField;
    dtarticulosfinalactualizar_stock: TIntegerField;
    DBCheckBox5: TDBCheckBox;
    listaiconos: TImageList;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    procedure tbuscarChange(Sender: TObject);
    procedure todosarticulosClick(Sender: TObject);
    procedure btAnuevoClick(Sender: TObject);
    procedure btAborrarClick(Sender: TObject);
    procedure btAmodificarClick(Sender: TObject);
    procedure btAguardarClick(Sender: TObject);
    procedure btAcancelarClick(Sender: TObject);
    procedure DBEdit12Change(Sender: TObject);
    procedure DBEdit8Change(Sender: TObject);
    procedure DBEdit22Change(Sender: TObject);
    procedure DBEdit10Change(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure dsqarticulosfinalStateChange(Sender: TObject);
    procedure qarticulosfinalAfterClose(DataSet: TDataSet);
    procedure qarticulosfinalAfterOpen(DataSet: TDataSet);
    procedure qarticulosfinalAfterRefresh(DataSet: TDataSet);
    procedure qarticulosfinalBeforeOpen(DataSet: TDataSet);
    procedure dsarticulosfinalStateChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    var   filtro:string;
          vertodos:integer;
  end;

var
  farticulos: Tfarticulos;

implementation

{$R *.dfm}


procedure Tfarticulos.btAcancelarClick(Sender: TObject);
begin
   dtarticulosfinal.cancel;
   dtarticulosfinal.MasterSource:=dsqarticulosfinal;
end;

procedure Tfarticulos.btAmodificarClick(Sender: TObject);
begin
   dtarticulosfinal.MasterSource:=nil;
   dtarticulosfinal.edit;
   dbedit1.SetFocus;
end;

procedure Tfarticulos.btAborrarClick(Sender: TObject);
begin
    dtarticulosfinal.delete;
    qarticulosfinal.Refresh;
    dtarticulosfinal.Refresh;
end;

procedure Tfarticulos.btAnuevoClick(Sender: TObject);
begin
   qaux.SQL.Clear;
   qaux.SQL.Add('select max(id)+1 from articulosf');
   qaux.Open;
   dtarticulosfinal.MasterSource:=nil;
   dtarticulosfinal.append;
   dbedit1.SetFocus;
   dbedit1.Text:=qaux.Fields[0].AsString;

end;

procedure Tfarticulos.DBEdit10Change(Sender: TObject);
begin
if dbedit10.Text<>'' then
  begin
  if (dtarticulosfinal.State in [dsedit,dsinsert]) and (dbedit10.Focused) then
      begin
          dtarticulosfinalpvp.Value:=(1+(dtarticulosfinalmargen.asfloat/100))*strtofloat(dbedit10.Text);
          dtarticulosfinalbeneficio.Value:=dtarticulosfinalpvp.AsFloat-strtofloat(dbedit10.Text);
      end;
  end;

end;

procedure Tfarticulos.DBEdit12Change(Sender: TObject);
begin
if dbedit12.Text<>'' then
  begin
    if (dtarticulosfinal.State in [dsedit,dsinsert]) and (dbedit12.Focused) then
        begin
            dtarticulosfinalpvp.Value:=dtarticulosfinalpreciocoste.AsFloat*((strtofloat(dbedit12.Text)/100)+1);
            dtarticulosfinalbeneficio.Value:=dtarticulosfinalpvp.AsFloat-dtarticulosfinalpreciocoste.asfloat;
        end;
    end;
end;

procedure Tfarticulos.DBEdit22Change(Sender: TObject);
begin
if dbedit22.Text<>'' then
  begin
    if (dtarticulosfinal.State in [dsedit,dsinsert]) and (dbedit22.Focused) then
        begin
            dtarticulosfinalmargen.Value:=(((strtofloat(dbedit22.Text)*100)/dtarticulosfinalpreciocoste.AsFloat))-100;
            dtarticulosfinalbeneficio.Value:=strtofloat(dbedit22.Text)-dtarticulosfinalpreciocoste.asfloat;
        end;
  end;
end;

procedure Tfarticulos.DBEdit8Change(Sender: TObject);
begin
if dbedit8.Text<>'' then
  begin
  if (dtarticulosfinal.State in [dsedit,dsinsert]) and (dbedit8.Focused) then
      begin
          dtarticulosfinalpvp.Value:=strtofloat(dbedit8.Text)+dtarticulosfinalpreciocoste.asfloat;
          dtarticulosfinalmargen.Value:=((dtarticulosfinalpvp.asfloat*100)/dtarticulosfinalpreciocoste.AsFloat)-100;
      end;
  end;
end;

procedure Tfarticulos.dsarticulosfinalStateChange(Sender: TObject);
begin
if dtarticulosfinal.State in [dsedit,dsinsert] then
    begin
       Panel14.Enabled:=true;
       btAnuevo.enabled:=false;
       btAborrar.enabled:=false;
       btAmodificar.enabled:=false;
       btAguardar.enabled:=true;
       btAcancelar.enabled:=true;
    end;
    if dtarticulosfinal.State in [dsbrowse] then
    begin
       Panel14.Enabled:=false;
       btAnuevo.enabled:=true;
       btAborrar.enabled:=true;
       btAmodificar.enabled:=true;
       btAguardar.enabled:=false;
       btAcancelar.enabled:=false;
    end;
end;

procedure Tfarticulos.dsqarticulosfinalStateChange(Sender: TObject);
begin
    if dtarticulosfinal.State in [dsedit,dsinsert] then
    begin
       Panel14.Enabled:=true;
       btAnuevo.enabled:=false;
       btAborrar.enabled:=false;
       btAmodificar.enabled:=false;
       btAguardar.enabled:=true;
       btAcancelar.enabled:=true;
    end;
    if dtarticulosfinal.State in [dsbrowse] then
    begin
       Panel14.Enabled:=false;
       btAnuevo.enabled:=true;
       btAborrar.enabled:=true;
       btAmodificar.enabled:=true;
       btAguardar.enabled:=false;
       btAcancelar.enabled:=false;
    end;
end;

procedure Tfarticulos.btAguardarClick(Sender: TObject);
begin
    dtarticulosfinal.Post;
    qarticulosfinal.Refresh;
    qarticulosfinal.Locate('id',dtarticulosfinalid.AsInteger,[locaseinsensitive,lopartialkey]);
    dtarticulosfinal.MasterSource:=dsqarticulosfinal;
    dtarticulosfinal.Refresh;
end;

procedure Tfarticulos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   qarticulosfinal.close;
   filtro:='';
   vertodos:=0;
end;

procedure Tfarticulos.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then Key :=9;
    end;

end;

procedure Tfarticulos.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 tdbgrid) then
        begin
            key:=',';
        end;
    end;
    if (activecontrol is tdbgrid) then
    begin
        if Key = #13 then Key :=#9;
    end;

    if (key=#13) then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;
end;

procedure Tfarticulos.FormShow(Sender: TObject);
begin
    qaux.ExecSQL;
    qarticulosfinal.close;
    qarticulosfinal.Open;
    detallesarticulos.ActivePageIndex:=5;
    qlistadoproveedores.Close;
    qlistadoproveedores.Open;
    qcompras.Close;
    qcompras.open;
end;

procedure Tfarticulos.qarticulosfinalAfterClose(DataSet: TDataSet);
begin
   dtarticulosfinal.close;
   qfamilias.close;
   qtipoivas.close;
   qproveedores.close;
end;

procedure Tfarticulos.qarticulosfinalAfterOpen(DataSet: TDataSet);
begin
   dtarticulosfinal.Open;
   qfamilias.Open;
   qtipoivas.Open;
   qproveedores.Open;
end;

procedure Tfarticulos.qarticulosfinalAfterRefresh(DataSet: TDataSet);
begin
   dtarticulosfinal.refresh;
   qfamilias.refresh;
   qtipoivas.refresh;
   qproveedores.refresh;
end;

procedure Tfarticulos.qarticulosfinalBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where descripcion like('+''''+filtro+''''+') or codigo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
       end;
      if vertodos=0 then
      begin
          begin
            filtrolocal:=' where (descripcion like('+''''+filtro+''''+') or codigo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+') and activo=1 ';
          end;
      end;
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodos=0 then
      begin
          filtrolocal:=' where activo=1 ';
      end;
    end;


    qarticulosfinal.SQL.Clear;
    qarticulosfinal.SQL.Add('select idempresa,id,codigo,descripcion,activo,preciocoste from articulosf ' + filtrolocal +' order by descripcion')

end;

procedure Tfarticulos.tbuscarChange(Sender: TObject);
begin
    filtro:='%'+tbuscar.Text+'%';
    if todosarticulos.Checked then vertodos:=1 else vertodos:=0;
    qarticulosfinal.Close;
    qarticulosfinal.open;
end;

procedure Tfarticulos.todosarticulosClick(Sender: TObject);
begin
    if todosarticulos.Checked=true then
    begin
        vertodos:=1;
        qarticulosfinal.Close;
        qarticulosfinal.SQL.Clear;
        qarticulosfinal.SQL.add('select * from articulosf order by descripcion asc');
        qarticulosfinal.Open;
    end else
    begin
        vertodos:=0;
        qarticulosfinal.Close;
        qarticulosfinal.SQL.Clear;
        qarticulosfinal.SQL.add('select * from articulosf where activo=1 order by descripcion asc');
        qarticulosfinal.Open;
    end;
end;

end.
