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

namespace GMW.WebUserControls
{
  public partial class mod_consumoFusi : System.Web.UI.UserControl
  {
    /// <summary>
    /// caricamento pagina
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack)
      {
        disableConfirm = false;
        traduciObj();
      }
      doChecks();
      lblGitterBoxAttivo.Text = "";
      if (currUdcFrom != "")
      {
        lblGitterBoxAttivo.Text += string.Format("UDC FROM: <b>{0}</b>", currUdcFrom);
      }
      if (string.IsNullOrEmpty(lblGitterBoxAttivo.Text))
      {
        lblGitterBoxAttivo.Text = "...";
      }
    }
    /// <summary>
    /// effettua controlli visibilità
    /// </summary>
    private void doChecks()
    {
      checkBarcode();
      checkConsuma();
    }
    /// <summary>
    /// sistemo labels oggetti
    /// </summary>
    private void traduciObj()
    {
      // buttons
      btnConsuma.Text = traduci("btnConsumaUdc");
      // fix button gestione disabilitazione conferme
      fixBtnDisableConf();
    }
    /// <summary>
    /// ssitema btn abilitazione/disabilitazione conferma comandi
    /// </summary>
    private void fixBtnDisableConf()
    {
      if (disableConfirm)
      {
        btnDisableConf.Text = traduci("confirmDisabled");
        btnDisableConf.CssClass = "btn btn-danger";
      }
      else
      {
        btnDisableConf.Text = traduci("confirmEnabled");
        btnDisableConf.CssClass = "btn btn-success";
      }
    }
    /// <summary>
    /// wrapper traduzione
    /// </summary>
    /// <param name="lemma"></param>
    /// <returns></returns>
    public string traduci(object lemma)
    {
      return user_std.UtSn.Traduci(lemma.ToString());
    }
    /// <summary>
    /// indica UDC FROM (F10) selezionato
    /// </summary>
    protected string currUdcFrom
    {
      get
      {
        return memLayer.ML.StringSessionObj("currUdcFrom");
      }
      set
      {
        memLayer.ML.setSessionVal("currUdcFrom", value, false);
      }
    }
    /// <summary>
    /// indica se i caratteri vadano forzati a maiuscoli
    /// </summary>
    public bool forceUppercase
    {
      get
      {
        return memLayer.ML.confReadBool("forceUppercase");
      }
    }
    /// <summary>
    /// indica se siano disabilitate le conferme x avere operazioni veloci
    /// </summary>
    public bool disableConfirm
    {
      get
      {
        return memLayer.ML.BoolSessionObj("disableConfirm");
      }
      set
      {
        memLayer.ML.setSessionVal("disableConfirm", value);
        fixBtnDisableConf();
      }
    }
    /// <summary>
    /// decodifica il tipo barcode acquisito
    /// </summary>
    public tipoCodiceBarcode tipoBCode
    {
      get
      {
        tipoCodiceBarcode answ = tipoCodiceBarcode.ND;
        int trovati = 0;
        // controllo non si tratti di un comando...
        string preCmd = memLayer.ML.AppConf["prefComandi"];
        if (barcodeIn.StartsWith(preCmd))
        {
          answ = tipoCodiceBarcode.Comando;
        }
        // controllo se sia un particolare Tipo P
        else if (TermClass.Ter.riconosciBarcode(barcodeIn) == tipoCodiceBarcode.Particolare && TermClass.Ter.isParticolare(barcodeIn)) // è un particolare...
        {
          answ = tipoCodiceBarcode.Particolare;
        }
        else
        {
          try
          {
            // cerco tra gitterbox (UDC)...
            trovati = MagClass.magazzino.taCartellini.getByUdc(barcodeIn).Rows.Count;
            if (trovati > 0)
            {
              answ = tipoCodiceBarcode.UDC;
            }
          }
          catch
          {
          }
        }
        return answ;
      }
    }
    /// <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 != "")
      {
        DS_Applicazione.ElencoCartelliniRow rigaCart;
        string tipoImballo = "";
        lblMessaggi.Text = string.Format("Barcode digitato: {0}", barcodeIn);
        Postazione.warningText = "";
        switch (tipoBCode)
        {
          case tipoCodiceBarcode.UDC:
            // procedo solo se UDC esistente
            if (MagClass.magazzino.checkUDC(barcodeIn))
            {
              // controllo se NON ci siano NC "pending"
              if (MagClass.magazzino.checkUDC_NC(barcodeIn) != checkUdcNc.HasNc)
              {
                // cerco di recuperare riga UDC
                try
                {
                  rigaCart = DataProxy.obj.taCartellini.stp_getByUdc(barcodeIn)[0];
                  tipoImballo = rigaCart.CodImballo;
                }
                catch
                { }
                // salvo UDC from
                currUdcFrom = barcodeIn;
                pnlAll.CssClass = "stileAttesa";
                // controllo: se sono in fast mode SCARICO!
                if (disableConfirm)
                {
                  scaricaUdcFrom();
                }
                // controllo SE PER CASO ci fosse NC e ci sia stata deroga, cambio MSG...
                if (MagClass.magazzino.checkUDC_NC(barcodeIn) == checkUdcNc.ChkDis_HasNc)
                {
                  Postazione.CssClass = "stileComandoKo";
                  Postazione.messaggiText += string.Format("<br />{0}", traduci("ERR-NC-001"));
                  // recupero l'NC associata...
                  Postazione.warningText += string.Format("<br />{0}", MagClass.magazzino.getDescrNc2Udc(barcodeIn));
                }
              }
              else
              {
                Postazione.CssClass = "stileComandoKo";
                Postazione.messaggiText += string.Format("<br />{0}", traduci("ERR-NC-001"));
                // recupero l'NC associata...
                Postazione.warningText += string.Format("<br />{0}", MagClass.magazzino.getDescrNc2Udc(barcodeIn));
              }
            }
            break;
          case tipoCodiceBarcode.Comando:
            // se richiesto scarico rapido lo gestisco
            if (barcodeIn.ToUpper() == memLayer.ML.cdv("cmdFast").ToUpper())
            {
              disableConfirm = !disableConfirm;
              lblMessaggi.Text = traduci("enDisFastMode");
            }
            break;
          default:
            lblMessaggi.Text += " - codice <b>non riconosciuto</b>!";
            pnlAll.CssClass = "stileComandoND";
            break;
        }
        barcodeIn = "";
      }
      else
      {
        lblMessaggi.Text = traduci("AttesaBCode");
        pnlAll.CssClass = "stileAttesa";
      }
      //grView.DataBind();
      txtBarcode.Focus();
    }
    /// <summary>
    /// controllo abilitazione consumo
    /// </summary>
    private void checkConsuma()
    {
      bool consumaOk = false;
      if (!disableConfirm)
      {
        if (currUdcFrom != "")
        {
          consumaOk = true;
        }
      }
      btnConsuma.Enabled = consumaOk;
    }
    /// <summary>
    /// genera i barcode di
    /// - trattamenti
    /// - nuovo x pezzi liquidi
    /// e lancia la relativa stampa
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnConsuma_Click(object sender, EventArgs e)
    {
      scaricaUdcFrom();
    }
    /// <summary>
    /// effettua scaricamento UDC FROM
    /// </summary>
    private void scaricaUdcFrom()
    {
      if (currUdcFrom != "")
      {
        // controllo se UDC non sia già consumato...
        if (MagClass.magazzino.udcMpIsConsumabile(currUdcFrom))
        {
          // controllo UDC sia corretto (in giusta posizione...)
          if (MagClass.magazzino.IdxPosizioneUdc(currUdcFrom) == memLayer.ML.cdvi("IdxPosizioneFusi"))
          {
            // consumo UDC
            MagClass.magazzino.scaricaUdcMpWip(currUdcFrom, Request.UserHostName);
            // indico UDC consumato!
            lblMessaggi.Text = string.Format("{0} {1}", traduci("effettuatoConsumoUDC"), currUdcFrom);
            currUdcFrom = "";
            pnlAll.CssClass = "stileComandoOk";
          }
          else
          {
            // indico UDC sbagliato!
            lblMessaggi.Text = string.Format("{0} {1}", traduci("UDC_tipoSbagliato"), currUdcFrom);
            pnlAll.CssClass = "stileComandoKo";
          }
        }
        else
        {
          // indico UDC consumato!
          lblMessaggi.Text = string.Format("{0} {1}", traduci("UDC_giaConsumato"), currUdcFrom);
          pnlAll.CssClass = "stileComandoKo";
        }
        lblGitterBoxAttivo.Text = "";
      }
    }
    /// <summary>
    /// cambia la modalità di scarico UDC dis/abilitando conferme
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnDisableConf_Click(object sender, EventArgs e)
    {
      disableConfirm = !disableConfirm;
    }
  }
}