unit fselectalbaranes;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, ZAbstractRODataset,
  ZAbstractDataset, ZDataset, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls;

type
  Tseleccionaralbaranes = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    DBGrid3: TDBGrid;
    Panel9: TPanel;
    btALnuevo: TButton;
    Button1: TButton;
    panelpedidos: TPanel;
    Panel6: TPanel;
    DBGrid2: TDBGrid;
    qaux: TZQuery;
    Button2: TButton;
    Button3: TButton;
    DBGrid1: TDBGrid;
    DBGrid4: TDBGrid;
    qinsertarfacturasdetalles: TZQuery;
    actualizaralbaranes: TZQuery;
    actualizaralbaranesdetalles: TZQuery;
    actualizarpedidosdetalle: TZQuery;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure btALnuevoClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  seleccionaralbaranes: Tseleccionaralbaranes;
const
  rojo=$00AAAAFF;
  amarillo=$00B9FFFF;
  verde=$00C7FBAA;
  azul=$00FFFFBB;
implementation

{$R *.dfm}

uses ffacturas;


procedure Tseleccionaralbaranes.btALnuevoClick(Sender: TObject);
var serie,empresa,idfactura,idalbaran,observaciones:string;
    pesobruto,pesoneto,pesonetoteorico,numpalets,documento:string;
    facturado:integer;
begin
    documento:='';
    idfactura:=facturas.facturasid.asstring;
    serie:=facturas.facturasserie.AsString;
    empresa:=facturas.facturasidempresa.AsString;
    idalbaran:=facturas.qalbaranesid.asstring;
    observaciones:=facturas.facturasobservaciones.asstring;
    facturas.facturas.Edit;
    facturas.facturasobservaciones.value:=observaciones+' '+facturas.qalbaranesobservaciones.AsString;
    facturas.facturas.Post;

    facturas.facturasdetalle.Append;
    facturas.facturasdetalleidempresa.Value:=strtoint(empresa);
    facturas.facturasdetalleserie.Value:=serie;
    facturas.facturasdetalleidfactura.Value:=strtoint(idfactura);
    facturas.facturasdetalledescripcion.Value:='Albaran '+idalbaran+' de fecha:'+facturas.qalbaranesfecha.AsString;
    facturas.facturasdetalletipoiva.value:=0;
    facturas.facturasdetalle.Post;



    qaux.sql.clear;
    qaux.sql.add('insert into facturas_detalles (idempresa,serie,idfactura,idarticulo,descripcion,cal,lote,bultos,cantidad,precio,descuento,totaldescuento,base,tipoiva,iva,total,idalbaran,coste_transporte,coste_comision,coste_otros,palets,');
    qaux.sql.add('pesobruto,envase,referencia,ean,unidadescaja,mprima,parcela,formato,pais)');
    qaux.sql.add(' (SELECT '+''''+empresa+''''+' as idempresa,'+''''+serie+''''+' as serie,'+''''+idfactura+''''+' as idfactura,idarticulo,descripcion,cal,lote,bultos,cantidad,');
    qaux.sql.add('precio,descuento,totaldescuento,base,tipoiva,iva,total,idalbaran,coste_transporte,coste_comision,coste_otros,palets,pesobruto,envase,referencia,ean,unidadescaja,mprima,parcela,formato,pais');
    qaux.sql.add(' FROM albaranes_detalles where id='+facturas.qalbaranesdetalleid.AsString+')');
    qaux.execsql;
    facturas.qalbaranesdetalle.Edit;
    facturas.qalbaranesdetalleidfactura.AsInteger:=strtoint(idfactura);
    facturas.qalbaranesdetalle.Post;
    facturas.qalbaranesdetalle.Refresh;
    if facturas.qalbaranesdetalle.RecordCount=0 then
    begin
      facturado:=1;
      actualizarpedidosdetalle.Close;
      actualizarpedidosdetalle.Prepare;
      actualizarpedidosdetalle.ParamByName('documento').AsString:= serie+'/'+idfactura;
      actualizarpedidosdetalle.ParamByName('albaran').AsString:= serie+'/'+idalbaran;
      actualizarpedidosdetalle.ExecSQL;
    end else
      begin
        facturado:=0;
        actualizarpedidosdetalle.Close;
        actualizarpedidosdetalle.Prepare;
        actualizarpedidosdetalle.ParamByName('documento').AsString:=serie+'/'+idfactura;
        actualizarpedidosdetalle.ParamByName('albaran').AsString:= serie+'/'+idalbaran;
        actualizarpedidosdetalle.ExecSQL;
      end;

    qaux.SQL.Clear;
    qaux.SQL.Add('select distinct(idfactura) from albaranes_detalles where idfactura='+idfactura+' and serie='+''''+serie+'''');
    qaux.Open;
    if qaux.RecordCount>0 then
    begin
       documento:=documento+qaux.Fields[0].AsString+' ';
       qaux.next;
    end;

    facturas.qalbaranes.edit;
    facturas.qalbaranesidfactura.value:=facturas.facturasid.asinteger;
    facturas.qalbaranesfacturado.Value:=facturado;
    facturas.qalbaranesdocumento.Value:='Factura Nš: '+documento;
    facturas.qalbaranes.post;


    facturas.qalbaranes.Refresh;
    facturas.qalbaranesdetalle.Refresh;
    facturas.qalbaranes2.Refresh;
    facturas.qalbaranesdetalle2.Refresh;
   // facturas.facturasdetalle.Refresh;

end;

procedure Tseleccionaralbaranes.Button1Click(Sender: TObject);
var serie,empresa,idalbaran,idfactura:string;
begin
    serie:=facturas.qalbaranes2serie.Asstring;
    empresa:=facturas.qalbaranes2idempresa.Asstring;
    idalbaran:=facturas.qalbaranes2id.Asstring;
    idfactura:=facturas.qalbaranes2idfactura.asstring;

    qaux.sql.clear;
    qaux.sql.add('delete from facturas_detalles where (idempresa,serie,idfactura,idarticulo) in ');
    qaux.sql.add(' (SELECT idempresa,serie,'+''''+idfactura+''''+' as idfactura,idarticulo FROM albaranes_detalles where id='+facturas.qalbaranesdetalle2id.asstring+' and idfactura='+idfactura+' and idempresa='+empresa+' and serie='+''''+serie+''''+')');
    qaux.execsql;

    qaux.sql.clear;
    qaux.sql.add('update albaranes_detalles set idfactura=null where id='+facturas.qalbaranesdetalle2id.AsString);
    qaux.execsql;
    facturas.qalbaranes2.Edit;
    facturas.qalbaranes2facturado.Value:=0;
    facturas.qalbaranes2.Post;
    facturas.qalbaranesdetalle.Refresh;
    facturas.qalbaranes.Refresh;
    facturas.qalbaranesdetalle2.Refresh;
    facturas.qalbaranes2.Refresh;
    facturas.facturasdetalle.Refresh;
    if facturas.qalbaranesdetalle2.RecordCount=0 then
    begin
      actualizarpedidosdetalle.Close;
      actualizarpedidosdetalle.Prepare;
      actualizarpedidosdetalle.ParamByName('documento').AsString:='';
      actualizarpedidosdetalle.ParamByName('albaran').AsString:= serie+'/'+idalbaran;
      actualizarpedidosdetalle.ExecSQL;
    end;

end;

procedure Tseleccionaralbaranes.Button2Click(Sender: TObject);
var serie,empresa,idfactura,idalbaran,observaciones:string;
    pesobruto,pesoneto,pesonetoteorico,numpalets:string;
begin
    idfactura:=facturas.facturasid.asstring;
    serie:=facturas.facturasserie.AsString;
    empresa:=facturas.facturasidempresa.AsString;
    idalbaran:=facturas.qalbaranesid.asstring;
    observaciones:=facturas.facturasobservaciones.asstring;
    facturas.facturas.Edit;
    facturas.facturasobservaciones.value:=observaciones+' '+facturas.qalbaranesobservaciones.AsString;
    facturas.facturascomision.value:=facturas.qalbaranescomision.Asfloat;
    facturas.facturas.Post;
    facturas.facturasdetalle.Append;
    facturas.facturasdetalleidempresa.Value:=strtoint(empresa);
    facturas.facturasdetalleserie.Value:=serie;
    facturas.facturasdetalleidfactura.Value:=strtoint(idfactura);
    facturas.facturasdetalledescripcion.Value:='Albaran '+idalbaran+' de fecha:'+facturas.qalbaranesfecha.AsString;
    facturas.facturasdetalletipoiva.value:=0;
    facturas.facturasdetalle.Post;
    qinsertarfacturasdetalles.close;
    qinsertarfacturasdetalles.prepare;
    qinsertarfacturasdetalles.ParamByName('EMPRESA').AsInteger:=facturas.facturasidempresa.AsInteger;
    qinsertarfacturasdetalles.ParamByName('FACTURA').AsInteger:=facturas.facturasid.AsInteger;
    qinsertarfacturasdetalles.ParamByName('ALBARAN').AsInteger:=strtoint(idalbaran);
    qinsertarfacturasdetalles.ParamByName('SERIE').AsString:=facturas.facturasserie.AsString;
    qinsertarfacturasdetalles.ExecSQL;
    actualizaralbaranesdetalles.Close;
    actualizaralbaranesdetalles.Prepare;
    actualizaralbaranesdetalles.ParamByName('factura').AsInteger:= facturas.facturasid.AsInteger;
    actualizaralbaranesdetalles.ParamByName('empresa').AsInteger:= facturas.facturasidempresa.AsInteger;
    actualizaralbaranesdetalles.ParamByName('serie').AsString:= facturas.facturasserie.Asstring;
    actualizaralbaranesdetalles.ParamByName('albaran').AsInteger:= strtoint(idalbaran);
    actualizaralbaranesdetalles.ExecSQL;
    actualizaralbaranes.Close;
    actualizaralbaranes.Prepare;
    actualizaralbaranes.ParamByName('albaran').AsInteger:= strtoint(idalbaran);
    actualizaralbaranes.ParamByName('serie').Asstring:= facturas.facturasserie.Asstring;
    actualizaralbaranes.ParamByName('documento').AsString:= 'Factura Nš: '+facturas.facturasid.AsString;
    actualizaralbaranes.ParamByName('factura').AsInteger:=facturas.facturasid.AsInteger;
    actualizaralbaranes.ExecSQL;
    actualizarpedidosdetalle.Close;
    actualizarpedidosdetalle.Prepare;
    actualizarpedidosdetalle.ParamByName('documento').AsString:= facturas.facturasserie.Asstring+'/'+facturas.facturasid.AsString;
    actualizarpedidosdetalle.ParamByName('albaran').AsString:= serie+'/'+idalbaran;
    actualizarpedidosdetalle.ExecSQL;


    {qaux.sql.clear;
    qaux.sql.add('update albaranes_detalles set idfactura='+facturas.facturasid.AsString+' where  idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+idalbaran);
    qaux.execsql;}
{    facturas.qalbaranes.edit;
    facturas.qalbaranesidfactura.value:=facturas.facturasid.asinteger;
    facturas.qalbaranesfacturado.Value:=1;
    facturas.qalbaranesdocumento.Value:='Factura Nš: '+facturas.facturasid.AsString;
    facturas.qalbaranes.post;   }
{    qaux.sql.clear;
    qaux.sql.add('insert into facturas_detalles (idempresa,serie,idfactura,idarticulo,descripcion,cal,lote,bultos,cantidad,precio,descuento,totaldescuento,base,tipoiva,iva,total,idalbaran,coste_transporte,coste_comision,palets)');
    qaux.sql.add(' (SELECT '+''''+empresa+''''+' as idempresa,'+''''+serie+''''+' as serie,'+''''+idfactura+''''+' as idfactura,idarticulo,descripcion,cal,lote,bultos,cantidad,');
    qaux.sql.add('precio,descuento,totaldescuento,base,tipoiva,iva,total,idalbaran,coste_transporte,coste_comision,palets');
    qaux.sql.add(' FROM albaranes_detalles where (idalbaran,idempresa,serie) in (select id,idempresa,serie from albaranes where idfactura='+idfactura+' and idempresa='+empresa+' and serie='+''''+serie+''''+' and id='+idalbaran+'))');
    qaux.execsql;}
    facturas.qalbaranesdetalle.Refresh;
    facturas.qalbaranes.Refresh;
    facturas.qalbaranes2.Refresh;
    facturas.qalbaranesdetalle2.Refresh;
    facturas.facturasdetalle.Refresh;

  {  pesobruto:=qaux.fields[0].asstring;
    pesobruto:=stringreplace(pesobruto,',','.',[rfreplaceall]);
    pesoneto:=qaux.fields[1].asstring;
    pesoneto:=stringreplace(pesoneto,',','.',[rfreplaceall]);
    pesonetoteorico:=qaux.fields[2].asstring;
    pesonetoteorico:=stringreplace(pesonetoteorico,',','.',[rfreplaceall]);
    numpalets:=qaux.fields[3].asstring;
    numpalets:=stringreplace(numpalets,',','.',[rfreplaceall]);
    qaux.SQL.Clear;
    qaux.SQL.Add('update facturas set peso_bruto='+pesobruto+',kilos='+pesoneto+',kilosventa='+pesonetoteorico+',numpalets='+numpalets+' where serie='+''''+serie+''''+' and id='+idfactura+' and idempresa='+facturas.facturasidempresa.AsString);
    qaux.execsql;}
    facturas.facturas.refresh;
    facturas.facturas.Locate('serie,id',vararrayof([serie,idfactura]),[locaseinsensitive])


end;

procedure Tseleccionaralbaranes.Button3Click(Sender: TObject);
var serie,empresa,idalbaran,idfactura:string;
begin
    serie:=facturas.qalbaranes2serie.Asstring;
    empresa:=facturas.qalbaranes2idempresa.Asstring;
    idalbaran:=facturas.qalbaranes2id.Asstring;
    idfactura:=facturas.qalbaranes2idfactura.asstring;


    qaux.sql.clear;
    qaux.sql.add('delete from facturas_detalles where (idempresa,serie,idfactura,idarticulo) in ');
    qaux.sql.add(' (SELECT idempresa,serie,'+''''+idfactura+''''+' as idfactura,idarticulo FROM albaranes_detalles where (idempresa,serie,idalbaran) in (select idempresa,serie,id from albaranes where idfactura='+idfactura+' and idempresa='+empresa+' and serie='+''''+serie+''''+' and id='+idalbaran+'))');
    qaux.execsql;

    qaux.SQL.Clear;
    qaux.SQL.Add('update albaranes set idfactura=null,facturado=0,documento=null where idempresa='+empresa+' and serie='+''''+serie+''''+' and id='+idalbaran);
    qaux.ExecSQL;
    qaux.SQL.Clear;
    qaux.SQL.Add('update albaranes_detalles set idfactura=null where idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+idalbaran);
    qaux.ExecSQL;
    actualizarpedidosdetalle.Close;
    actualizarpedidosdetalle.Prepare;
    actualizarpedidosdetalle.ParamByName('documento').AsString:='';
    actualizarpedidosdetalle.ParamByName('albaran').AsString:=serie+'/'+idalbaran;
    actualizarpedidosdetalle.ExecSQL;

    facturas.qalbaranes.Refresh;
    facturas.qalbaranesdetalle.Refresh;
    facturas.qalbaranes2.Refresh;
    facturas.qalbaranesdetalle2.Refresh;
    facturas.facturasdetalle.Refresh;

end;

procedure Tseleccionaralbaranes.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then Key :=9;
    end;

end;

end.
