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

namespace GMW.WebUserControls
{
  public partial class mod_anagLinee : ApplicationUserControl
  {
    /// <summary>
    /// reset della selezione
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnReset_Click(object sender, EventArgs e)
    {
      resetSelezione();
    }
    /// <summary>
    /// resetta la selezione dei valori in caso di modifiche su altri controlli
    /// </summary>
    public void resetSelezione()
    {
      grView.SelectedIndex = -1;
      grView.DataBind();
      raiseEvent(ucEvType.Reset);
    }
    /// <summary>
    /// inserisce nuovo valore da footer
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lblIns_click(object sender, EventArgs e)
    {
      // click su inserimento, chiamo il metodo insert dell'ObjectDataSource
      ods.Insert();
    }
    /// <summary>
    /// gestione evento richiesta nuovo valore (mostra footer, ...)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnNew_Click(object sender, EventArgs e)
    {
      // creo nuova riga NON ATTIVA!!!
      creaNuovaLinea();
      // reset selezione...
      resetSelezione();
    }
    /// <summary>
    /// Creo una nuova linea andando a creare prima tutte el dipendenze...
    /// </summary>
    private void creaNuovaLinea()
    {
      DS_magazzino.BlocchiRow rigaBlocco = null;
      DS_magazzino.TipoCellaRow rigaTipoCella = null;
      DS_magazzino.CelleDataTable tabCelle = null;
      DS_magazzino.CelleRow rigaCella = null;
      string codMagPost = "";
      string CodCS = memLayer.ML.CRS("CodCS");

      // recupero blocco selezionato 
      try
      {
        rigaBlocco = MagClass.magazzino.taBlocchi.getByCodBlocco(CodBlocco)[0];
      }
      catch
      { }
      if (rigaBlocco != null)
      {
        // 2016.08.04 modifica: CodMag da decodifica Blocchi: CodBlocco selezionato --> vedo quale CodMag (e NON + da web.config)
        codMagPost = rigaBlocco.CodMag;
        //// OLD: magazzino linee: da web config ("WIP") cerco il suo CodMag
        //string codMagPost = memLayer.ML.CRS("codMagPost");

        // recupero TipoCella
        try
        {
          // attenzione: capienza == 1 x quelle cercate...
          rigaTipoCella = ((DS_magazzino.TipoCellaRow)MagClass.magazzino.taTipoCella.getByCodMag(CodCS, codMagPost).Select(" Capienza = 1 ")[0]);
        }
        catch
        { }
        if (rigaTipoCella != null)
        {
          //  --> +1 qta cella
          MagClass.magazzino.taTipoCella.UpdateQuery(rigaTipoCella.IdxTipoCella, codMagPost, CodCS, rigaTipoCella.Quantita + 1, rigaTipoCella.Capienza, rigaTipoCella.Max_X, rigaTipoCella.Max_Y, rigaTipoCella.Max_Z, rigaTipoCella.Max_Kg, rigaTipoCella.CheckPiena, rigaTipoCella.SetMag);
          // --> +1 qta blocco
          MagClass.magazzino.taBlocchi.UpdateQuery(codMagPost, CodCS, rigaBlocco.CodBlocco, rigaBlocco.DescBlocco, rigaBlocco.NumX + 1, rigaBlocco.NumY, rigaBlocco.NumZ, rigaBlocco.IdxBlocco);
          // creo NUOVA CELLA
          utils.obj.taSTP.stp_celleCreaMancantiBlocco(CodCS, codMagPost, rigaBlocco.IdxBlocco, rigaTipoCella.IdxTipoCella);
          // recupero ultima cella creata...
          tabCelle = MagClass.magazzino.taCelle.getByIdxBlocco(rigaBlocco.IdxBlocco);
          if (tabCelle.Rows.Count > 0)
          {
            try
            {
              rigaCella = (DS_magazzino.CelleRow)tabCelle.Select(string.Format("X = {0}", rigaBlocco.NumX + 1))[0];
            }
            catch
            { }
            if (rigaCella != null)
            {
              // creo nuova linea
              MagClass.magazzino.taAL.Insert(rigaCella.CodCella.Substring(0, 5), "NUOVA LINEA", "", DateTime.Now, "", "", false, false, "ND", "IO", false, memLayer.ML.CRI("minTimeDef"), memLayer.ML.CRI("maxTimeDef"));
            }
          }

        }
      }
    }

    /// <summary>
    /// determina se sia eliminabile il record (=non usato)
    /// </summary>
    /// <param name="idxMaker"></param>
    /// <returns></returns>
    public bool delEnabled(object idxObj)
    {
      bool answ = isWritable();

      return answ;
    }

    /// <summary>
    /// elenco colonne del datagrid
    /// </summary>
    /// <returns></returns>
    protected DataColumnCollection colonneObj()
    {
      DS_DataMatrix.TabSpecDtxDataTable tabella = new DS_DataMatrix.TabSpecDtxDataTable();
      DataColumnCollection colonne = tabella.Columns;
      return colonne;
    }
    /// <summary>
    /// recupera i dati di un nuovo record contenuti nel footer di un gridView;
    /// questi devono essere opportunamente nominati (es: txt{0}, dl{0}, ...)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void recuperaFooter(object sender, ObjectDataSourceMethodEventArgs e)
    {
      //recupero la riga footer...
      DataColumnCollection colonne = colonneObj();
      string nomeCol;
      string tipoColonna = "";
      foreach (DataColumn colonna in colonne)
      {
        nomeCol = colonna.ColumnName;
        // cerco un textbox o quello che sia...
        if (grView.FooterRow.FindControl(string.Format("txt{0}", nomeCol)) != null)
        {
          tipoColonna = "textBox";
        }
        else if (grView.FooterRow.FindControl(string.Format("dl{0}", nomeCol)) != null)
        {
          tipoColonna = "dropDownList";
        }
        else if (grView.FooterRow.FindControl(string.Format("chk{0}", nomeCol)) != null)
        {
          tipoColonna = "checkBox";
        }
        else if (grView.FooterRow.FindControl(string.Format("selAjax_{0}", nomeCol)) != null)
        {
          tipoColonna = "selAjax";
        }
        // in base al tipo salvo negli inputparameters dell'ODS
        switch (tipoColonna)
        {
          case "textBox":
            e.InputParameters[nomeCol] = ((TextBox)grView.FooterRow.FindControl(string.Format("txt{0}", nomeCol))).Text;
            break;
          case "dropDownList":
            e.InputParameters[nomeCol] = ((DropDownList)grView.FooterRow.FindControl(string.Format("dl{0}", nomeCol))).SelectedValue;
            break;
          case "checkBox":
            e.InputParameters[nomeCol] = ((CheckBox)grView.FooterRow.FindControl(string.Format("chk{0}", nomeCol))).Checked;
            break;
          case "selAjax":
            e.InputParameters[nomeCol] = ((mod_selettore_ajax)grView.FooterRow.FindControl(string.Format("selAjax_{0}", nomeCol))).valore;
            break;
          default:
            break;
        }
        tipoColonna = "";
      }
      // imposto formato Dtmx
      e.InputParameters["FormatoDtmx"] = "";
    }

    protected void grView_SelectedIndexChanged(object sender, EventArgs e)
    {
      raiseEvent(ucEvType.Selected);
    }

    public string CodBlocco
    {
      get
      {
        return hfCodBlocco.Value;
      }
      set
      {
        hfCodBlocco.Value = value;
      }
    }

    protected void ods_Updating(object sender, ObjectDataSourceMethodEventArgs e)
    {
      if (e.InputParameters["FormatoDtmx"] == null) e.InputParameters["FormatoDtmx"] = "";
    }
    /// <summary>
    /// Verifica NON sia linea root (=termina x 00)
    /// </summary>
    /// <param name="_codLinea"></param>
    /// <returns></returns>
    public bool isNotRoot(object _codLinea)
    {
      bool answ = false;
      if (!_codLinea.ToString().EndsWith("00")) answ = true;
      return answ;
    }
    /// <summary>
    /// numero righe da mostrare
    /// </summary>
    public int numRows
    {
      get
      {
        return grView.PageSize;
      }
      set
      {
        grView.PageSize = value;
        grView.DataBind();
      }
    }
    /// <summary>
    /// Forza permesso selezione items
    /// </summary>
    public bool enableSelect
    {
      get
      {
        bool answ = false;
        bool convOk = bool.TryParse(hfEnableSelect.Value, out answ);
        return answ;
      }
      set
      {
        hfEnableSelect.Value = value.ToString(new CultureInfo("en-US"));
      }
    }
    /// <summary>
    /// Forza permesso selezione items
    /// </summary>
    public bool enableEdit
    {
      get
      {
        bool answ = false;
        bool convOk = bool.TryParse(hfEnableEdit.Value, out answ);
        return answ;
      }
      set
      {
        hfEnableEdit.Value = value.ToString(new CultureInfo("en-US"));
      }
    }
    /// <summary>
    /// Forza permesso selezione items
    /// </summary>
    public bool showDetail
    {
      get
      {
        bool answ = false;
        bool convOk = bool.TryParse(hfShowDetail.Value, out answ);
        return answ;
      }
      set
      {
        hfShowDetail.Value = value.ToString(new CultureInfo("en-US"));
      }
    }

    public string codLineaSel
    {
      get
      {
        string answ = "";
        try
        {
          answ = grView.SelectedValue.ToString();
        }
        catch
        { }
        return answ;
      }
    }
  }
}