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

namespace GMW.WebUserControls
{
  public partial class mod_sanpos_associaz_F10_F18 : 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)
      {
        calcolaPostazione();
        traduciObj();
      }
      doChecks();
      lblGitterBoxAttivo.Text = "";
      if (currUdcFrom != "")
      {
        lblGitterBoxAttivo.Text += string.Format("{1}: <b>{0}</b>", currUdcFrom, traduci("UdcPartenza"));
      }
      if (lblGitterBoxAttivo.Text != "")
      {
        lblGitterBoxAttivo.Text += "<br />";
      }
      if (currUdcTo != "")
      {
        lblGitterBoxAttivo.Text += string.Format("{1}: <b>{0}</b>", currUdcTo, traduci("UdcArrivo"));
      }
      if (string.IsNullOrEmpty(lblGitterBoxAttivo.Text))
      {
        lblGitterBoxAttivo.Text = "...";
      }
    }
    /// <summary>
    /// effettua controlli visibilità
    /// </summary>
    private void doChecks()
    {
      checkBarcode();
      checkStampa();
    }
    /// <summary>
    /// sistemo labels oggetti
    /// </summary>
    private void traduciObj()
    {
      // buttons
      btnAssocia.Text = traduci("btnAssocia");
    }
    /// <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>
    /// calcola postazione corrente (ip, name, printer)
    /// </summary>
    private void calcolaPostazione()
    {
      postazione_IP = Request.UserHostName;
      postazione_name = dnsUtils.DetermineCompName(postazione_IP);
      // cerco stampante x postazione
      postazione_printer = "n.d.";
      try
      {
        DS_Applicazione.ElencoPostazioniDataTable tabPost = DataProxy.obj.taElPost.getByCod(postazione_name);
        if (tabPost.Rows.Count > 0)
        {
          postazione_printer = tabPost[0].stampante;
        }
        //else
        //{
        //    tabPost = DataProxy.obj.taElPost.getByCod("default");
        //    postazione_printer = tabPost[0].stampante;
        //}
      }
      catch
      { }
    }
    /// <summary>
    /// indica name della postazione corrente
    /// </summary>
    protected string postazione_name
    {
      get
      {
        return memLayer.ML.StringSessionObj("postazione_name");
      }
      set
      {
        memLayer.ML.setSessionVal("postazione_name", value);
      }
    }
    /// <summary>
    /// indica ip della postazione corrente
    /// </summary>
    protected string postazione_IP
    {
      get
      {
        return memLayer.ML.StringSessionObj("postazione_IP");
      }
      set
      {
        memLayer.ML.setSessionVal("postazione_IP", value);
      }
    }
    /// <summary>
    /// indica stampante associata alla postazione corrente
    /// </summary>
    protected string postazione_printer
    {
      get
      {
        return memLayer.ML.StringSessionObj("postazione_printer");
      }
      set
      {
        memLayer.ML.setSessionVal("postazione_printer", value);
      }
    }
    /// <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 UDC TO (F18) selezionato
    /// </summary>
    protected string currUdcTo
    {
      get
      {
        return memLayer.ML.StringSessionObj("currUdcTo");
      }
      set
      {
        memLayer.ML.setSessionVal("currUdcTo", value, false);
      }
    }
    /// <summary>
    /// indica se i caratteri vadano forzati a maiuscoli
    /// </summary>
    public bool forceUppercase
    {
      get
      {
        return memLayer.ML.confReadBool("forceUppercase");
      }
    }
    /// <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 = "";
        Postazione.messaggiText = string.Format("Barcode digitato: {0}", barcodeIn);
        switch (tipoBCode)
        {

          case tipoCodiceBarcode.UDC:
            // procedo solo se UDC esistente
            if (MagClass.magazzino.checkUDC(barcodeIn))
            {
              // cerco di recuperare riga UDC
              try
              {
                rigaCart = DataProxy.obj.taCartellini.stp_getByUdc(barcodeIn)[0];
                tipoImballo = rigaCart.CodImballo;
              }
              catch
              { }
              // controllo il tipo imballo dell'UDC per decidere se sia F10 o F18...
              if (tipoImballo == memLayer.ML.cdv("CodImballoLiquidi"))
              {
                // salvo UDC from
                currUdcFrom = barcodeIn;
              }
              else if (tipoImballo == memLayer.ML.cdv("CodImballoLiquidiDaSpedire"))
              {
                // salvo UDC to
                currUdcTo = barcodeIn;
              }
              else
              {
                Postazione.messaggiText += " - codice UDC non valido / non trovato.";
                pnlAll.CssClass = "stileComandoKo";
              }
            }

            break;
          default:
            Postazione.messaggiText += " - codice <b>non riconosciuto</b>!";
            pnlAll.CssClass = "stileComandoND";
            break;
        }
        barcodeIn = "";
      }
      else
      {
        Postazione.messaggiText = traduci("AttesaBCode");
        pnlAll.CssClass = "stileAttesa";
      }
      //grView.DataBind();
      txtBarcode.Focus();
    }
    /// <summary>
    /// controllo l'abilitazione alla stampa UDC:
    /// - particolare ok
    /// - qta > 0
    /// - almeno 1 trattamento
    /// altrimenti disabilito btn stampa
    /// </summary>
    private void checkStampa()
    {
      bool associaOk = false;
      if (currUdcFrom != "" && currUdcTo != "")
      {
        associaOk = true;
      }
      btnAssocia.Enabled = associaOk;
    }
    /// <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 btnAssocia_Click(object sender, EventArgs e)
    {
      if (currUdcFrom != "" && currUdcTo != "")
      {
        // associo i 2 cartellini
        MagClass.magazzino.associaUdcParent(currUdcTo, currUdcFrom);
        // indico UDC associati!
        Postazione.messaggiText = string.Format("{0} {1} -> {2}", traduci("effettuataAssociazione"), currUdcFrom, currUdcTo);
        currUdcFrom = "";
        currUdcTo = "";
        lblGitterBoxAttivo.Text = "";
      }
    }
  }
}