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

namespace GMW.WebUserControls
{
  public partial class mod_setAttrDtx : System.Web.UI.UserControl
  {
    /// <summary>
    /// Oggetto locale gestione classe datamatrix...
    /// </summary>
    protected DataMatrix DataMatrix_mgr = new DataMatrix();
    /// <summary>
    /// flusso associato (hard coded) a sterrati
    /// </summary>
    protected string flusso = "ST";
    /// <summary>
    /// stato associato (hard coded) a  sterrati
    /// </summary>
    protected string statoUDC = "Sterr";
    /// <summary>
    /// tipo di evento associato alla creazione dell'UDC
    /// </summary>
    protected string eventoUDC = "UDC_SBFUS";
    public event EventHandler eh_reqUpdate;
    /// <summary>
    /// stringa UID univoca
    /// </summary>
    public string uid
    {
      get
      {
        return this.UniqueID.Replace("$", "_").Replace("-", "_");
      }
    }
    /// <summary>
    /// caricamento pagina
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack)
      {
        traduciObj();
        divBlocca.Visible = false;
        idxCella = Postazione.currIdxCella;
      }
      doChecks();
    }
    /// <summary>
    /// IDX cella associata alla linea corrente
    /// </summary>
    protected int idxCella
    {
      get
      {
        int answ = 0;
        if (memLayer.ML.isInSessionObject("IdxCellaLineaST"))
        {
          answ = memLayer.ML.IntSessionObj("IdxCellaLineaST");
        }
        return answ;
      }
      set
      {
        memLayer.ML.setSessionVal("IdxCellaLineaST", value);
      }
    }
    /// <summary>
    /// effettua controlli visibilità
    /// </summary>
    private void doChecks()
    {
      checkBarcode();
    }
    /// <summary>
    /// sistemo labels oggetti
    /// </summary>
    private void traduciObj()
    {
    }
    /// <summary>
    /// restituisce il nome della pagina corrente
    /// </summary>
    protected string PagCorrente
    {
      get
      {
        string answ = "";
        Uri MyUrl = Request.Url;
        string delimStr = "/";
        char[] delimiter = delimStr.ToCharArray();
        string[] finalUrl = MyUrl.LocalPath.ToString().Split(delimiter);
        int n = finalUrl.Length;
        answ = finalUrl[n - 1].ToString();
        DataLayer_AnagGen.PermessiRow riga = (DataLayer_AnagGen.PermessiRow)user_std.UtSn.permessi.Select(string.Format("URL = '{0}'", answ))[0];
        answ = riga.NOME;
        return answ;
      }
    }
    /// <summary>
    /// wrapper traduzione
    /// </summary>
    /// <param name="lemma"></param>
    /// <returns></returns>
    public string traduci(object lemma)
    {
      return user_std.UtSn.Traduci(lemma.ToString());
    }
    /// <summary>
    /// indica il codice articolo correntemente selezionato
    /// </summary>
    protected string currParticolare
    {
      get
      {
        return memLayer.ML.StringSessionObj(string.Format("currParticolare_{0}", uid));
      }
      set
      {
        memLayer.ML.setSessionVal(string.Format("currParticolare_{0}", uid), value, memLayer.ML.confReadBool("keepParticolareSel"));
      }
    }
    /// <summary>
    /// indica UDC correntemente selezionato
    /// </summary>
    protected string currUDC
    {
      get
      {
        return memLayer.ML.StringSessionObj(string.Format("UDC_{0}", uid));
      }
      set
      {
        memLayer.ML.setSessionVal(string.Format("UDC_{0}", uid), value, memLayer.ML.confReadBool("keepParticolareSel"));
      }
    }
    /// <summary>
    /// indica se i caratteri vadano forzati a maiuscoli
    /// </summary>
    public bool forceUppercase
    {
      get
      {
        return memLayer.ML.confReadBool("forceUppercase");
      }
    }
    /// <summary>
    /// valore barcode
    /// </summary>
    public string barcodeIn
    {
      get
      {
        return txtBarcode.Text.Trim();
      }
      set
      {
        txtBarcode.Text = value;
      }
    }
    /// <summary>
    /// Formato Datamatrix della linea selezionata
    /// </summary>
    protected string FormatoDtmxLinea
    {
      get
      {
        return ddlFormDmtx.SelectedValue;
      }
    }
    /// <summary>
    /// Formato Datamatrix dell'ultimo barcode letto
    /// </summary>
    protected string FormatoDtmxBarcode
    {
      get
      {
        string answ = "";
        try
        {
          answ = DataMatrix_mgr.taVerifica.GetData(barcodeIn)[0].FormatoDtmx;
        }
        catch
        { }
        return answ;
      }
    }
    /// <summary>
    /// controlla se ci sia un barcode
    /// </summary>
    private void checkBarcode()
    {
      if (barcodeIn != "")
      {
        Postazione.messaggiText = string.Format("Barcode digitato: {0}", barcodeIn);
        tipoCodiceBarcode tipoBC = MagClass.tipoBCode_L5(barcodeIn);
        switch (tipoBC)
        {
          case tipoCodiceBarcode.DataMatrixTrovato:
            // verifico formato datamatrix letto sia quello della linea...
            if (FormatoDtmxBarcode != FormatoDtmxLinea)
            {
              // errore corrispondenza formato Dtmx
              Postazione.messaggiText = barcodeIn;
              Postazione.warningText = traduci("ERR-DTX-014");
              Postazione.CssClass = "stileComandoKo";
            }
            else
            {

              Postazione.messaggiText = string.Format("{0} {1} su dtx TROVATO {2}", traduci("AssegnatoAttr"), ddlTipoAttr.SelectedValue, barcodeIn);
              Postazione.CssClass = "stileComandoOk";
              // assegno attributo!
              DataMatrix_mgr.taAtt2Dtx.insertAndProc(barcodeIn, true, ddlTipoAttr.SelectedValue, string.Format("Assegnazione Attr {0} su Dtmx TROVATO tipo {1}", ddlTipoAttr.SelectedValue, ddlFormDmtx.SelectedValue), DateTime.Now, MagClass.magazzino.CodSoggCurrUser);
              grView.DataBind();
            }
            break;
          case tipoCodiceBarcode.DataMatrixDecodificato:
            // verifico formato datamatrix letto sia quello della linea...
            if (FormatoDtmxBarcode != FormatoDtmxLinea)
            {
              // errore corrispondenza formato Dtmx
              Postazione.messaggiText = barcodeIn;
              Postazione.warningText = traduci("ERR-DTX-014");
              Postazione.CssClass = "stileComandoKo";
            }
            else
            {

              Postazione.messaggiText = string.Format("{0} {1} su dtx DECODIFICATO {2}", traduci("AssegnatoAttr"), ddlTipoAttr.SelectedValue, barcodeIn);
              Postazione.CssClass = "stileComandoOk";
              // assegno attributo!
              DataMatrix_mgr.taAtt2Dtx.insertAndProc(barcodeIn, true, ddlTipoAttr.SelectedValue, string.Format("Assegnazione Attr {0} su Dtmx DECODIFICATO tipo {1}", ddlTipoAttr.SelectedValue, ddlFormDmtx.SelectedValue), DateTime.Now, MagClass.magazzino.CodSoggCurrUser);
              grView.DataBind();
            }
            break;
          default:
            Postazione.messaggiText += " - codice <b>non riconosciuto</b>!";
            Postazione.CssClass = "stileComandoND";
            divBlocca.Visible = false;
            break;
        }
        barcodeIn = "";
      }
      else
      {
        Postazione.messaggiText = traduci("AttesaBCode");
        Postazione.CssClass = "stileAttesa";
      }
      txtBarcode.Focus();
    }

    /// <summary>
    /// aggiorna tabella + focus a barcode
    /// </summary>
    public void doUpdate()
    {
      idxCella = Postazione.currIdxCella;
      grView.DataBind();
      txtBarcode.Focus();
      // raise dell'evento
      if (eh_reqUpdate != null)
      {
        eh_reqUpdate(this, new EventArgs());
      }
    }
    /// <summary>
    /// effettua reset dati
    /// </summary>
    public void doResetData()
    {
      // resetto i dati QtaTot e particolare...
      currParticolare = "";
      doChecks();
    }

    protected void grView_PageIndexChanged(object sender, EventArgs e)
    {
      // fix dell'ODS
      checkFixOds();
    }
    protected void grView_Sorted(object sender, EventArgs e)
    {
      // fix dell'ODS
      checkFixOds();
    }
    /// <summary>
    /// aggiorno ods al binding..
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ods_DataBinding(object sender, EventArgs e)
    {
      // fix dell'ODS
      checkFixOds();
    }
    /// <summary>
    /// verifica se attivo filtro company e imposta ods di conseguenza...
    /// </summary>
    private void checkFixOds()
    {
    }


    /// <summary>
    /// sblocca UDC
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void BloccaUDC_Click(object sender, EventArgs e)
    {
      // va cancellata la sua relazioni Fuso-Sterrato e va spostato in locazione Fusi Terra
      DataMatrix_mgr.taAtt2Dtx.insertAndProc(barcodeIn, true, ddlTipoAttr.SelectedValue, "NC FUS B48", DateTime.Now, MagClass.magazzino.CodSoggCurrUser);
      // resetto selezione
      divBlocca.Visible = false;
      currUDC = "";
      currParticolare = "";
      doUpdate();
    }

    protected void ddlFormDmtx_SelectedIndexChanged(object sender, EventArgs e)
    {
      checkFixOds();
    }

    protected void ddlTipoAttr_SelectedIndexChanged(object sender, EventArgs e)
    {
      checkFixOds();
    }
  }
}