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

namespace GMW.WebUserControls
{
  public partial class mod_recAttributiDtx : System.Web.UI.UserControl
  {
    /// <summary>
    /// Oggetto locale gestione classe datamatrix...
    /// </summary>
    protected DataMatrix DataMatrix_mgr = new DataMatrix();
    public event EventHandler eh_reqUpdate;
    /// <summary>
    /// Avvio pagina
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack)
      {
        resetIN();
      }
      checkBarcode();
    }
    /// <summary>
    /// restta input
    /// </summary>
    private void resetIN()
    {
      AddAttr = true;
      lblCodAttr.Text = currAttr;
    }
    /// <summary>
    /// Aggiungi/Rimuovi attributo
    /// </summary>
    public bool AddAttr
    {
      get
      {
        return chkAdd.Checked;
      }
      set
      {
        chkAdd.Checked = value;
      }
    }
    /// <summary>
    /// wrapper traduzione
    /// </summary>
    /// <param name="lemma"></param>
    /// <returns></returns>
    public string traduci(object lemma)
    {
      return user_std.UtSn.Traduci(lemma.ToString());
    }
    /// <summary>
    /// tipologia di attributo registrato con DataMatrix
    /// </summary>
    public tipoAttrDtx tipologia { get; set; }
    /// <summary>
    /// valore barcode
    /// </summary>
    public string barcodeIn
    {
      get
      {
        return txtBarcode.Text.Trim();
      }
      set
      {
        txtBarcode.Text = value;
      }
    }
    /// <summary>
    /// controlla se ci sia un barcode
    /// </summary>
    private void checkBarcode()
    {
      if (barcodeIn != "")
      {
        Postazione.messaggiText = string.Format("{0}: {1}", traduci("BCodeIns"), barcodeIn);
        switch (MagClass.tipoBCode_L5(barcodeIn))
        {
          case tipoCodiceBarcode.DataMatrixTrovato:
            // recupero da UDC
            try
            {
              // se si tratta di prove distruttive registrando attributi si fa update di UDC e link...
              DataMatrix_mgr.taAtt2Dtx.insertAndProc(barcodeIn, AddAttr, currAttr, tipologia.ToString(), DateTime.Now, MagClass.magazzino.CodSoggCurrUser);
              if (AddAttr)
              {
                Postazione.messaggiText = string.Format("{0}: {1}", traduci("RegistratoAttributo"), tipologia);
              }
              else
              {
                Postazione.messaggiText = string.Format("{0}: {1}", traduci("EliminatoAttributo"), tipologia);
              }
              Postazione.warningText = "";
              Postazione.CssClass = "stileComandoOk";
            }
            catch
            {
              Postazione.warningText = traduci("ERR-A2D-001");
              Postazione.CssClass = "stileComandoKo";
            }
            break;
          case tipoCodiceBarcode.Comando:
            // se è reset cancello tutto!
            if (barcodeIn == memLayer.ML.cdv("cmdReset"))
            {
              resetIN();
              Postazione.messaggiText = "";
              Postazione.warningText = "";
              doUpdate();
            }
            Postazione.CssClass = "stileAttesa";
            break;
          default:
            Postazione.messaggiText = "";
            Postazione.warningText = traduci("ERR-UNK-001");
            Postazione.CssClass = "stileComandoND";
            break;
        }
        barcodeIn = "";
      }
      else
      {
        Postazione.messaggiText = traduci("AttesaBCode");
        Postazione.CssClass = "stileAttesa";
      }
      doUpdate();
    }
    /// <summary>
    /// modificato attributo registra/elimina attributo
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void chkAdd_CheckedChanged(object sender, EventArgs e)
    {
      doUpdate();
    }
    /// <summary>
    /// aggiorna componenti + focus a barcode
    /// </summary>
    public void doUpdate()
    {
      if (AddAttr)
      {
        chkAdd.Text = traduci("AggiungiAttr");
        lblAdd.Attributes.Remove("class");
        lblAdd.Attributes.Add("class", "btn btn-warning");
      }
      else
      {
        chkAdd.Text = traduci("TogliAttr");
        lblAdd.Attributes.Remove("class");
        lblAdd.Attributes.Add("class", "btn btn-danger");
      }
      grView.DataBind();
      // raise dell'evento
      if (eh_reqUpdate != null)
      {
        eh_reqUpdate(this, new EventArgs());
      }
      txtBarcode.Focus();
    }
    /// <summary>
    /// codice attributo corrente da tipologia attributi controllo (hard coded)
    /// </summary>
    public string currAttr
    {
      get
      {
        string answ = "";
        switch (tipologia)
        {
          case tipoAttrDtx.ExtraCiclo:
            answ = "EC";
            break;
          case tipoAttrDtx.ProveDimensionali:
            answ = "PD";
            break;
          case tipoAttrDtx.ProveDistruttive:
            answ = "DI";
            break;
          default:
            answ = "";
            break;
        }
        return answ;
      }
    }
  }
}
/// <summary>
/// Tipologia attributi legati a DTX ammessi/Gestiti
/// </summary>
public enum tipoAttrDtx
{
  /// <summary>
  /// Gestione ExtraCiclo
  /// </summary>
  ExtraCiclo,
  /// <summary>
  /// Gestione prove dimensionali 
  /// </summary>
  ProveDimensionali,
  /// <summary>
  /// Gestione prove distruttive
  /// </summary>
  ProveDistruttive
}
