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


namespace GMW.WebUserControls
{
  public partial class mod_UdcCella : SteamWare.ApplicationUserControl
  {
    #region area da NON modificare

    #region area protected

    protected string _idxGridView;
    protected string _idxGridViewExt;
    protected string _tabCache;
    protected bool _showNewBtn = false;


    /// <summary>
    /// traduce gli header delle colonne
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void grView_DataBound(object sender, EventArgs e)
    {
      if (grView.Rows.Count > 0)
      {
        LinkButton lb;
        // aggiorno gli headers        
        foreach (TableCell cella in grView.HeaderRow.Cells)
        {
          try
          {
            lb = (LinkButton)cella.Controls[0];
            lb.Text = traduci(lb.Text);
          }
          catch
          { }
        }
        int totRecord = grView.Rows.Count + grView.PageSize * (grView.PageCount - 1);
        lblNumRec.Text = string.Format("{0} records of ~ {1}", grView.Rows.Count, totRecord);
      }
      else
      {
        lblNumRec.Text = "";
      }
    }


    /// <summary>
    /// collega i controlli
    /// </summary>
    protected override void bindControlli()
    {
      base.bindControlli();
      caricaTabelle();
    }

    #endregion

    #region gestione eventi

    public event EventHandler eh_resetSelezione;
    public event EventHandler eh_nuovoValore;
    public event EventHandler eh_selValore;

    #endregion

    #region public

    /// <summary>
    /// effettua update del modulo
    /// </summary>
    public void doUpdate()
    {
      resetSelezione();
      checkFixOds();
      grView.DataBind();
    }
    /// <summary>
    /// resetta la selezione dei valori in caso di modifiche su altri controlli
    /// </summary>
    public void resetSelezione()
    {
      SteamWare.memLayer.ML.emptySessionVal(string.Format("{0}_sel", _idxGridView));
      grView.SelectedIndex = -1;
      lblWarning.Visible = false;
      if (eh_resetSelezione != null)
      {
        eh_resetSelezione(this, new EventArgs());
      }
    }

    #endregion

    #endregion

    #region area codice variabile

    public event EventHandler eh_nuovaRicerca;

    /// <summary>
    /// aggiorna controlli datagrid e numero righe in pagina
    /// </summary>
    protected override void aggiornaControlliDataGL()
    {
      base.aggiornaControlliDataGL();
      grView.PageSize = _righeDataGridShort;
    }
    /// <summary>
    /// carico le tabelle
    /// </summary>
    private void caricaTabelle()
    {
    }
    /// <summary>
    /// elenco colonne del datagrid
    /// </summary>
    /// <returns></returns>
    protected DataColumnCollection colonneObj()
    {
      DS_magazzino.v_UdcDetailDataTable tabella = new DS_magazzino.v_UdcDetailDataTable();
      DataColumnCollection colonne = tabella.Columns;
      return colonne;
    }
    /// <summary>
    /// inizializzazione valori di default
    /// </summary>
    /// <param name="e"></param>
    protected override void OnInit(EventArgs e)
    {
      base.OnInit(e);
      if (!Page.IsPostBack)
      {
        traduzione();
        azzeraPostUpdate();
        updateText();
      }
      _idxGridView = "UDC2edit";
    }
    /// <summary>
    /// traduzioni
    /// </summary>
    protected void traduzione()
    {
      // sistemo labels e buttons
      lblQta.Text = traduci("lblQta");
      lblNewPos.Text = traduci("lblNewPos");
      lblErrore.Text = traduci("ErroreCellaDestOccupata");
      btnQta.Text = traduci("btnQta");
      btnSposta.Text = traduci("btnSposta");
    }
    /// <summary>
    /// verifica se attivo filtro company e imposta ods di conseguenza...
    /// </summary>
    private void 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();
    }

    protected void grView_PageIndexChanged(object sender, EventArgs e)
    {
      // fix dell'ODS
      checkFixOds();
    }
    protected void grView_Sorted(object sender, EventArgs e)
    {
      // fix dell'ODS
      checkFixOds();
    }

    protected void grView_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
      // fix dell'ODS
      checkFixOds();
    }

    /// <summary>
    /// chiama procedura x spostamento tra celle di un UDC
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnSposta_Click1(object sender, EventArgs e)
    {
      // ricavo il valore dell'UDC cliccato...
      string UDC = memLayer.ML.StringSessionObj(string.Format("{0}_sel", _idxGridView));
      int IdxCellaTo = 0;
      bool cellaToOk = false;
      try
      {
        DS_magazzino.CelleRow rowCella = MagClass.magazzino.taCelle.getByCodCella(txtNewCella.Text)[0];
        IdxCellaTo = rowCella.IdxCella;
        // controllo che la cella di destinazione NON sia bloccata
        cellaToOk = rowCella.Attiva;
      }
      catch
      { }
      if (cellaToOk)
      {
        // controllo che sia valido x fare l'operazione
        if (IdxCellaTo > 0)
        {
          MagClass.magazzino.spostaUDC(memLayer.ML.StringSessionObj("CodCS"), UDC, IdxCellaTo, memLayer.ML.confReadBool("spostaUdcResettaLdp"), Request.UserHostName);
        }
        azzeraPostUpdate();
        if (eh_nuovoValore != null)
        {
          eh_nuovoValore(this, new EventArgs());
        }
      }
      else
      {
        // la cella è bloccata, nn devo permettere spostamento
        lblErrore.Visible = true;
      }
    }
    /// <summary>
    /// aggiorna la qta pezzi dell'UDC indicato
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnQta_Click(object sender, EventArgs e)
    {
      string UDC = memLayer.ML.StringSessionObj(string.Format("{0}_sel", _idxGridView));
      decimal qta = -1;
      try
      {
        qta = Convert.ToDecimal(txtQta.Text);
      }
      catch
      { }
      if (qta >= 0)
      {
        MagClass.magazzino.rettificaQtaUDC(UDC, qta, Request.UserHostName);
      }
      azzeraPostUpdate();
    }

    /// <summary>
    /// reset della selezione
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnReset_Click(object sender, EventArgs e)
    {
      azzeraPostUpdate();
    }
    /// <summary>
    /// reset controlli post aggiornamento
    /// </summary>
    private void azzeraPostUpdate()
    {
      lblErrore.Visible = false;
      grView.DataBind();
      resetSelezione();
      txtNewCella.Text = "";
      txtQta.Text = "";
      doShowPanels(false);
    }
    /// <summary>
    /// gestione cambio selezione valore
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void grView_SelectedIndexChanged(object sender, EventArgs e)
    {
      // salvo in session il valore selezionato...
      memLayer.ML.setSessionVal(string.Format("{0}_sel", _idxGridView), grView.SelectedValue, true);
      // fix panels
      doShowPanels(true);
      // sollevo evento nuovo valore...
      if (eh_selValore != null)
      {
        eh_selValore(this, new EventArgs());
      }
    }
    /// <summary>
    /// determina visibilità panels correzione valori
    /// </summary>
    /// <param name="p"></param>
    private void doShowPanels(bool p)
    {
      pnlQta.Visible = p;
      pnlSposta.Visible = p;
    }


    /// <summary>
    /// cambiato valore in ricerca
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void txtCerca_TextChanged(object sender, EventArgs e)
    {
      salvaCerca();
    }
    /// <summary>
    /// pressione del button di ricerca
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnCerca_Click(object sender, EventArgs e)
    {
      salvaCerca();
    }

    /// <summary>
    /// testo ricerca trimmato da spazi
    /// </summary>
    protected string testoRicerca
    {
      get
      {
        return txtCerca.Text.Trim();
      }
      set
      {
        txtCerca.Text = value;
      }
    }
    protected void salvaCerca()
    {
      if (string.IsNullOrEmpty(testoRicerca))
      {
        SteamWare.memLayer.ML.emptySessionVal("valoreCercatoCella");
      }
      else
      {
        SteamWare.memLayer.ML.setSessionVal("valoreCercatoCella", testoRicerca);
      }
      // raise dell'evento
      if (eh_nuovaRicerca != null)
      {
        eh_nuovaRicerca(this, new EventArgs());
      }
    }
    /// <summary>
    /// aggiorna il testo cercato
    /// </summary>
    public void updateText()
    {
      if (SteamWare.memLayer.ML.StringSessionObj("valoreCercatoCella") != "" && !Page.IsPostBack)
      {
        testoRicerca = SteamWare.memLayer.ML.StringSessionObj("valoreCercatoCella");
      }
    }

    #endregion

  }
}