unit articulos;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.DB,
  ZAbstractRODataset, ZAbstractDataset, ZDataset, Vcl.Grids, Vcl.DBGrids,
  Vcl.ImgList, Vcl.StdCtrls;

type
  Tfarticulos = class(TForm)
    Panel3: TPanel;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    DBGrid3: TDBGrid;
    dsqarticulos: TDataSource;
    qarticulos: TZQuery;
    qarticuloside: TWideStringField;
    qarticulosid: TWideStringField;
    qarticulosdescripcion: TWideStringField;
    qarticulosobservaciones: TWideStringField;
    dsqescandallo: TDataSource;
    qescandallo: TZQuery;
    dsqarticulos_procesos: TDataSource;
    qarticulos_procesos: TZQuery;
    qescandalloide: TWideStringField;
    qescandalloida: TWideStringField;
    qescandalloidmateriaprima: TWideStringField;
    qescandallocantidad: TFloatField;
    qarticulos_procesoside: TWideStringField;
    qarticulos_procesosida: TWideStringField;
    qarticulos_procesosidproceso: TIntegerField;
    qarticulos_procesosdescripcion: TWideStringField;
    qescandallodescripcion: TWideStringField;
    qarticulos_procesosorden: TIntegerField;
    Button1: TButton;
    listaiconos: TImageList;
    lbuscar: TEdit;
    Label1: TLabel;
    qarticulosunidades_pack: TIntegerField;
    procedure FormShow(Sender: TObject);
    procedure DBGrid3DblClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure DBGrid3TitleClick(Column: TColumn);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure DBGrid2TitleClick(Column: TColumn);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure qarticulosBeforePost(DataSet: TDataSet);
    procedure qarticulosBeforeDelete(DataSet: TDataSet);
    procedure qescandalloBeforeDelete(DataSet: TDataSet);
    procedure qarticulos_procesosBeforeDelete(DataSet: TDataSet);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure qescandalloBeforePost(DataSet: TDataSet);
    procedure qarticulos_procesosBeforePost(DataSet: TDataSet);
    procedure lbuscarChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  farticulos: Tfarticulos;

implementation

{$R *.dfm}

uses cfgarticulos, datos;

procedure Tfarticulos.Button1Click(Sender: TObject);
begin
    fcfgarticulos := Tfcfgarticulos.Create(nil);
    try
      fcfgarticulos.qarticulo.sql.clear;
      fcfgarticulos.qarticulo.sql.Add('select * from articulos where ide='+qarticuloside.asstring+' and id='+''''+qarticulosid.AsString+'''');
      fcfgarticulos.qprocesos.sql.clear;
      fcfgarticulos.qprocesos.sql.Add('select * from procesos where id not in (select distinct(idproceso) from articulos_procesos where ide='+qarticuloside.asstring+' and ida='+''''+qarticulosid.AsString+''''+') order by descripcion');
      fcfgarticulos.qarticulosproceso.sql.clear;
      fcfgarticulos.qarticulosproceso.sql.Add('select * from articulos_procesos where ide='+qarticuloside.asstring+' and ida='+''''+qarticulosid.AsString+''''+' order by orden,descripcion');
      fcfgarticulos.qescandallo.sql.clear;
      fcfgarticulos.qescandallo.sql.Add('select * from escandallo where ide='+qarticuloside.asstring+' and ida='+''''+qarticulosid.AsString+''''+' order by descripcion');
    fcfgarticulos.qmaterias_primas.Close;
    fcfgarticulos.qmaterias_primas.Prepare;
    fcfgarticulos.qmaterias_primas.ParamByName('PIDE').Asstring:=fcfgarticulos.qarticuloide.AsString;
    fcfgarticulos.qmaterias_primas.ParamByName('PIDA').Asstring:=fcfgarticulos.qarticuloid.AsString;
    fcfgarticulos.qmaterias_primas.ParamByName('TEXTO').AsString:='%';//fcfgarticulos.qarticulosid.AsString;
    fcfgarticulos.qmaterias_primas.Open;
//      fcfgarticulos.qmaterias_primas.sql.clear;
//      fcfgarticulos.qmaterias_primas.sql.Add('select * from materias_primas where id not in (select distinct(idmateriaprima) from escandallo where ide='+''''+qarticuloside.AsString+''''+' and ida='+''''+qarticulosid.AsString+''''+') order by descripcion');
      fcfgarticulos.showmodal();
    finally
      fcfgarticulos.Free;
      qarticulos_procesos.Refresh;
      qescandallo.Refresh;
    end;
end;

procedure Tfarticulos.DBGrid1TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qescandallo.SortType;
  qescandallo.SortedFields:=Column.FieldName;
  If st = stAscending then qescandallo.SortType:=stDescending else qescandallo.SortType:=stAscending;
  dsqescandallo.DataSet.First;
end;

procedure Tfarticulos.DBGrid2TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qarticulos_procesos.SortType;
  qarticulos_procesos.SortedFields:=Column.FieldName;
  If st = stAscending then qarticulos_procesos.SortType:=stDescending else qarticulos_procesos.SortType:=stAscending;
  dsqarticulos_procesos.DataSet.First;
end;

procedure Tfarticulos.DBGrid3DblClick(Sender: TObject);
begin
    fcfgarticulos := Tfcfgarticulos.Create(nil);
    try
      fcfgarticulos.qarticulo.sql.clear;
      fcfgarticulos.qarticulo.sql.Add('select * from articulos where ide='+qarticuloside.asstring+' and id='+''''+qarticulosid.AsString+'''');
      fcfgarticulos.qprocesos.sql.clear;
      fcfgarticulos.qprocesos.sql.Add('select * from procesos where id not in (select distinct(idproceso) from articulos_procesos where ide='+qarticuloside.asstring+' and ida='+''''+qarticulosid.AsString+''''+') order by descripcion');
      fcfgarticulos.qarticulosproceso.sql.clear;
      fcfgarticulos.qarticulosproceso.sql.Add('select * from articulos_procesos where ide='+qarticuloside.asstring+' and ida='+''''+qarticulosid.AsString+''''+' order by orden,descripcion');
      fcfgarticulos.qescandallo.sql.clear;
      fcfgarticulos.qescandallo.sql.Add('select * from escandallo where ide='+qarticuloside.asstring+' and ida='+''''+qarticulosid.AsString+''''+' order by descripcion');
      fcfgarticulos.qmaterias_primas.prepare;
      fcfgarticulos.qmaterias_primas.ParamByName('PIDE').Asstring:=qarticuloside.AsString;
      fcfgarticulos.qmaterias_primas.ParamByName('PIDA').Asstring:=qarticulosid.AsString;
      fcfgarticulos.qmaterias_primas.ParamByName('TEXTO').Asstring:='%';
      fcfgarticulos.showmodal();
    finally
      fcfgarticulos.Free;
      qarticulos_procesos.Refresh;
      qescandallo.Refresh;
    end;
end;

procedure Tfarticulos.DBGrid3TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qarticulos.SortType;
  qarticulos.SortedFields:=Column.FieldName;
  If st = stAscending then qarticulos.SortType:=stDescending else qarticulos.SortType:=stAscending;
  dsqarticulos.DataSet.First;
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 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);
var vbuscar:string;
begin
    qarticulos.Close;
    qarticulos.Prepare;
    if lbuscar.Text='' then vbuscar:='%' else vbuscar:='%'+lbuscar.Text+'%';
    qarticulos.ParamByName('TEXTO').AsString:=vbuscar;
    qarticulos.Open;
    qescandallo.Open;
    qarticulos_procesos.open;
end;

procedure Tfarticulos.lbuscarChange(Sender: TObject);
var vbuscar:string;
begin
    qarticulos.Close;
    qarticulos.Prepare;
    if lbuscar.Text='' then vbuscar:='%' else vbuscar:='%'+lbuscar.Text+'%';
    qarticulos.ParamByName('TEXTO').AsString:=vbuscar;
    qarticulos.Open;

end;

procedure Tfarticulos.qarticulosBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este artículo?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tfarticulos.qarticulosBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qarticulos.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta este artículo?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar este artículo?',true,true,true);
    case x of
        mrno: begin
                 qarticulos.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 qarticulos.cancel;
                 abort;
                 END;

    end;
end;

procedure Tfarticulos.qarticulos_procesosBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este proceso?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tfarticulos.qarticulos_procesosBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qescandallo.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta este artículo?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar este artículo?',true,true,true);
    case x of
        mrno: begin
                 qescandallo.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 qescandallo.cancel;
                 abort;
                 END;

    end;

end;

procedure Tfarticulos.qescandalloBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este registro?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tfarticulos.qescandalloBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if qescandallo.state=dsinsert then x:=dm.PedirConfirmacion('¿Confirma que desea dar de alta este artículo?',true,true,true)
                                     else x:=dm.PedirConfirmacion('¿Confirma que desea modificar este artículo?',true,true,true);
    case x of
        mrno: begin
                 qescandallo.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                 qescandallo.cancel;
                 abort;
                 END;

    end;
end;

end.
