using GMW_data;
using SteamWare;
using System;
using System.Web.UI.WebControls;

namespace GMW.WebUserControls
{
  public partial class mod_finiti : GMW_data.UserControlBCodeMan
  {
    /// <summary>
    /// Imposta variabili specifiche classe
    /// </summary>
    public override void setupVariabili()
    {
      flusso = "FI";
      statoUDC = "Fin";
      eventoUDC = "UDC_FINWIP";
      eventoUDC_qta = "UDC_QTY";
      codLineaKo = "W2100";
      tipoUdcLinea = "Finito";
      IdxPosizioneIn = memLayer.ML.cdvi("IdxPosizioneTrattati");
      IdxPosizioneOut = memLayer.ML.cdvi("IdxPosizioneFiniti");
      IdxPosizioneOutTempName = "IdxPosizioneFinTemp";
      sVarIdxCella = "IdxCellaLineaFiniti";
      IdxPosizioneOutTemp = memLayer.ML.cdvi(IdxPosizioneOutTempName);
      tipoCartCurr = tipoCartellino.cartFiniti;
      enableBCodeParticolare = false;
    }
    /// <summary>
    /// Codice AL target
    /// </summary>
    public override string destAL
    {
      get
      {
        return lblAL.Text.Trim();
      }
      set
      {
        lblAL.Text = value;
      }
    }
    /// <summary>
    /// controlla particolare selezionato
    /// </summary>
    public override void checkParticolare()
    {
      if (currParticolare != "")
      {
        lblParticolareAttivo.Text = string.Format("Particolare selezionato <b>{0}</b>", currParticolare);
        // aggiungo descrizione del particolare
        string descr = "";
        string disegno = "";
        getDescrDisegnoParticolare(currParticolare, ref descr, ref disegno);
        lblDescrAttivo.Text = descr;
        lblDisegno.Text = disegno;
      }
      else
      {
        lblParticolareAttivo.Text = "...";
        lblDescrAttivo.Text = "";
        lblDisegno.Text = "";
      }
    }
    /// <summary>
    /// sistemo labels oggetti
    /// </summary>
    public override void traduciObj()
    {
      base.traduciObj();
      // buttons
      btnEmptyNote.Text = traduci("btnEmptyNote");
    }
    /// <summary>
    ///  num pezzi dell'ultimo UDC del particolare generato
    /// </summary>
    public override int pezziUdc
    {
      get
      {
        int answ = base.pezziUdc;
        if (answ == 0)
        {
          answ = memLayer.ML.cdvi("QtaImballoFiniti");
        }
        return answ;
      }
    }
    /// <summary>
    /// valore barcode
    /// </summary>
    public override string barcodeIn
    {
      get
      {
        return txtBarcode.Text.Trim();
      }
      set
      {
        txtBarcode.Text = value;
      }
    }
    /// <summary>
    /// qta pezzi TOTALE
    /// </summary>
    public override int qta
    {
      get
      {
        int qta = 0;
        try
        {
          qta = Convert.ToInt32(txtQta.Text.Trim());
        }
        catch
        { }
        return qta;
      }
      set
      {
        txtQta.Text = value.ToString();
      }
    }
    /// <summary>
    /// Note utente effettive
    /// </summary>
    public override string campoNote
    {
      get
      {
        return txtNote.Text.Trim();
      }

      set
      {
        txtNote.Text = value;
      }
    }
    /// <summary>
    /// IMposta e legge imballo selezionato
    /// </summary>
    public override string imballoSel
    {
      get
      {
        return ddlImballi.SelectedValue;
      }
      set
      {
        ddlImballi.SelectedValue = value;
      }
    }
    /// <summary>
    /// crea eventualmente UDC per particolare in AL di destinazione e restituisce codice UDC
    /// </summary>
    /// <param name="forceMove">Forza lo spostamento a idxCella corrente...</param>
    /// <param name="createUdcOut">indica se si debba creare UDC in uscita se mancasse...</param>
    public override string checkCreaUDC(bool forceMove, bool createUdcOut)
    {
      string udcDest = base.checkCreaUDC(forceMove, createUdcOut);
      grViewDest.DataBind();
      return udcDest;
    }
    /// <summary>
    /// aggiorna tabella + focus a barcode
    /// </summary>
    public override void doUpdate()
    {
      base.doUpdate();
      grView.DataBind();
      grViewDest.DataBind();
      txtBarcode.Focus();
      // raise dell'evento
      raiseEvent(ucEvType.ReqUpdateParent);
    }
    /// <summary>
    /// controllo l'abilitazione alla stampa UDC:
    /// - particolare ok
    /// - qta > 0
    /// - udc da consumo totale/parziale
    /// altrimenti disabilito btn stampa
    /// </summary>
    public override void checkStampa()
    {
      bool stampaOk = false;
      //controllo siano inseriti valori qta
      if (qta > 0 && grViewDest.SelectedIndex >= 0)
      {
        // controllo ci siano particolare
        if (currParticolare != "")
        {
          stampaOk = true;
          txtNote.Focus();
        }
      }
      divNote.Visible = stampaOk;
    }
    /// <summary>
    /// Gestione reset
    /// </summary>
    public override void doResetData()
    {
      grViewDest.SelectedIndex = -1;
      base.doResetData();
    }
    /// <summary>
    /// traduce gli header delle colonne
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void grView_DataBound(object sender, EventArgs e)
    {
      if (grView.Rows.Count > 0)
      {
        LinkButton lb;
        // aggiorno gli headers        
        foreach (TableCell cella in grView.HeaderRow.Cells)
        {
          try
          {
            lb = (LinkButton)cella.Controls[0];
            lb.Text = traduci(lb.Text);
          }
          catch
          { }
        }
        int totRecord = grView.Rows.Count + grView.PageSize * (grView.PageCount - 1);
        lblNumRec.Text = string.Format("{0} records of ~ {1}", grView.Rows.Count, totRecord);
      }
      else
      {
        lblNumRec.Text = "";
      }
    }
    /// <summary>
    /// evento selezione grView destinazione: ricarico dati!
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void grViewDest_SelectedIndexChanged(object sender, EventArgs e)
    {
      // ricarico dati dell'UDC come particolare e quantità...
      currUDC = grViewDest.SelectedDataKey["UDC"].ToString();
      if (MagClass.magazzino.checkUDC(currUDC))
      {
        currParticolare = DataProxy.obj.taCartellini.stp_getByUdc(currUDC)[0].Particolare;
        qta = Convert.ToInt32(DataProxy.obj.taCartellini.stp_getByUdc(currUDC)[0].Qta);
        selezionaImballo();
      }
      Postazione.messaggiText = traduci("partSelected");
      Postazione.warningText = "";
      Postazione.CssClass = "stileComandoOk";
      doChecks();
      doUpdate();
      // fisso focus su note!
      txtNote.Focus();
    }
    /// <summary>
    /// sistema modalità input
    /// </summary>
    public override void setVisibility()
    {
      bool showBtn = false;
      // ora controllo btn quantità
      if (grViewDest.SelectedIndex >= 0)
      {
        showBtn = true;
      }
      divQta.Visible = showBtn;
    }
    /// <summary>
    /// reset della selezione
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public override void btnReset_Click(object sender, EventArgs e)
    {
      grViewDest.SelectedIndex = -1;
      base.btnReset_Click(sender, e);
    }
    /// <summary>
    /// gestione specifica update qta
    /// </summary>
    public override void aggiornaQta()
    {
      base.aggiornaQta();
      grViewDest.SelectedIndex = -1;
      setVisibility();
      doUpdate();
    }
    /// <summary>
    /// qui la selezione è x scaricare...
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void grView_SelectedIndexChanged(object sender, EventArgs e)
    {
      consumaUdc(grView.SelectedValue.ToString());
      doUpdate();
    }
  }
}