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

namespace GMW.WebUserControls
{
  public partial class mod_nuovaListaPrelievo : System.Web.UI.UserControl
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack)
      {
        // traduco!
        lblTipo.Text = traduci("TipoLista");
        lblParticolare.Text = traduci("Particolare");
        lblEsponente.Text = traduci("Esponente");
        lblFigura.Text = traduci("Figura");
        lblQta.Text = traduci("Qta");
        lblImballo.Text = traduci("Imballo");
        lblDestinatario.Text = traduci("Destinatario");
        // all'avvio disabilito ricerca x campi "avanzati..."
        setFullControlsVisibility(false);
        btnCreaNuova.Text = traduci("CreaNuovaListaPrelievo");
        // // sistema il tipo oggetto dell'autocompletamento...
        // fixAutocomplete();
      }
      checkParticolare();
#if false
            acParticolare.eh_valSelezionato += acParticolare_eh_valSelezionato;
            acParticolare.eh_reset += acParticolare_eh_reset; 
#endif
    }

    private void acParticolare_eh_reset(object sender, EventArgs e)
    {
      checkParticolare();
    }

    void acParticolare_eh_valSelezionato(object sender, EventArgs e)
    {
      checkParticolare();
    }
    // /// <summary>
    // /// imposta il corretto autocompletamento del particolare
    // /// </summary>
    // private void fixAutocomplete()
    // {
    //     // quale tipo lista?
    //     string tipoLista = ddlTipoLista.SelectedValue;
    //     string tipoObj = "";
    //     try
    //     {
    //         tipoObj = GMW_data.utils.obj.taSelTipoLista.getByValue(tipoLista)[0].conditio;
    //     }
    //     catch
    //     { }
    //     switch (tipoObj)
    //     {
    //         case "A":
    //             //aceParticolare.ServiceMethod = "elencoAnime";

    //             // acParticolare.ServicePath = "../WS/DataFeed.asmx/anime";  
    //             break;
    //         case "P":
    //             //aceParticolare.ServiceMethod = "elencoParticolari";
    //             // acParticolare.ServicePath = "../WS/DataFeed.asmx/particolari";
    //             break;
    //         default:
    //             break;
    //     }
    // }

    private void setFullControlsVisibility(bool completeVisible)
    {
      lblEsponente.Visible = completeVisible;
      ddlEsponente.Visible = completeVisible;
      lblFigura.Visible = completeVisible;
      ddlFigura.Visible = completeVisible;
      lblQta.Visible = completeVisible;
      txtQta.Visible = completeVisible;
      lblDestinatario.Visible = completeVisible;
      ddlDestin.Visible = completeVisible;
      lblImballo.Visible = completeVisible;
      ddlImballo.Visible = completeVisible;
      btnCreaNuova.Visible = completeVisible;
    }
    /// <summary>
    /// wrapper traduzione
    /// </summary>
    /// <param name="lemma"></param>
    /// <returns></returns>
    public string traduci(object lemma)
    {
      return user_std.UtSn.Traduci(lemma.ToString());
    }
    /// <summary>
    /// verifico se il codice particolare sia conforme
    /// </summary>
    /// <param name="particolare"></param>
    /// <returns></returns>
    protected bool particolareOk(string particolare)
    {
      bool answ = false;
      answ = DataProxy.obj.taAnagParticolari.getByParticolare(particolare).Rows.Count > 0;
      return answ;
    }
    /// <summary>
    /// completata selezione particoalre, avanzo
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void txtParticolare_TextChanged(object sender, EventArgs e)
    {
      checkParticolare();
    }
    /// <summary>
    /// controlla il particolare se sia valido
    /// </summary>
    private void checkParticolare()
    {
      // calcolo ed aggiorno conteggio pezzi disponibili...
      int numPezziDisp = 0;
      try
      {
        string codEsponente = ddlEsponente.SelectedValue;
        if (string.IsNullOrEmpty(codEsponente)) codEsponente = "*";
        string codFigura = ddlFigura.SelectedValue;
        if (string.IsNullOrEmpty(codFigura)) codFigura = "*";
        string CodImballo = ddlImballo.SelectedValue;
        if (string.IsNullOrEmpty(CodImballo)) CodImballo = "*";
        string codTipoLista = ddlTipoLista.SelectedValue;
        numPezziDisp = MagClass.magazzino.numUdcDaPart(memLayer.ML.cdv("CodCS"), ParticolareRichiesto, codEsponente, codFigura, CodImballo, codTipoLista);
        // sottraggo quelli 
        lblTotPz.Text = string.Format("{0} UDC ", numPezziDisp);
      }
      catch (Exception e)
      {
        httpLog(string.Format("Eccezione in verifica pezzi disponibili per il particolare {0}: eccezione {1}", ParticolareRichiesto, e), tipoLog.EXCEPTION);
      }
      // controllo se cod particolare è valido...
      //if (particolareOk(txtParticolare.Text.Trim()))
      if (particolareOk(ParticolareRichiesto))
      {
        // abilito ricerca esponente figura...
        setFullControlsVisibility(true);
        // setto ddl a "*"
        ddlEsponente.SelectedValue = "*";
        ddlFigura.SelectedValue = "*";
        ddlImballo.SelectedValue = "*";
        // verifico
        if (numPezziDisp > 0)
        {
          btnCreaNuova.Visible = true;
        }
        else
        {
          btnCreaNuova.Visible = false;
        }
      }
      else
      {
        // disabilito ricerce esponenti figure
        ddlEsponente.Visible = false;
        ddlFigura.Visible = false;
        txtQta.Visible = false;
        ddlDestin.Visible = false;
        ddlImballo.Visible = false;
        btnCreaNuova.Visible = false;
      }
    }
    /// <summary>
    /// wrapper per log con salvataggio dell'IP del chiamante
    /// </summary>
    /// <param name="_testoPre"></param>
    /// <returns></returns>
    public bool httpLog(string _testoPre)
    {
      bool answ = false;
      string postazione_IP = "";
      try
      {
        postazione_IP = string.Format(" | {0} | ", Request.UserHostName);
      }
      catch
      { }
      logger.lg.scriviLog(postazione_IP + _testoPre);
      return answ;
    }
    /// <summary>
    /// wrapper per log con salvataggio dell'IP del chiamante
    /// </summary>
    /// <param name="_testoPre"></param>
    /// <returns></returns>
    public bool httpLog(string testoLog, tipoLog tipo)
    {
      bool answ = false;
      string postazione_IP = "";
      try
      {
        postazione_IP = string.Format(" | {0} | ", Request.UserHostName);
      }
      catch
      { }
      logger.lg.scriviLog(postazione_IP + testoLog, tipo);
      return answ;
    }
    /// <summary>
    /// crea nuova lista di prelievo
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnCreaNuova_Click(object sender, EventArgs e)
    {
      // controllo se qta != 0...
      decimal qta = 0;
      string destinatario = "";
      string destinatarioDescr = "";
      try
      {
        // calcolo il dato del destinatario...
        GMW_data.DS_Utility.v_selDestinatariListePrelievoRow riga = utils.obj.taDestListePre.getByValue(ddlDestin.SelectedValue)[0];
        destinatario = riga.value.Trim();
        destinatarioDescr = riga.label.Trim();
      }
      catch
      { }
      try
      {
        qta = Convert.ToDecimal(txtQta.Text);
      }
      catch
      { }
      if (qta > 0 && destinatario != "")
      {
        MagClass.magazzino.creaListaPrelievo(memLayer.ML.cdv("CodCS"), ddlTipoLista.SelectedValue, ParticolareRichiesto, ddlEsponente.SelectedValue, ddlFigura.SelectedValue, qta, ddlImballo.SelectedValue, destinatario, destinatarioDescr);
        // sollevo evento nuovo valore...
        if (eh_nuovoValore != null)
        {
          eh_nuovoValore(this, new EventArgs());
        }
      }
    }
    /// <summary>
    /// evento nuovo valore
    /// </summary>
    public event EventHandler eh_nuovoValore;
    /// <summary>
    /// valore del aprticolare della lsita prelievo get/set
    /// </summary>
    public string ParticolareRichiesto
    {
      get
      {
        return txtParticolare.Text;
      }
      set
      {
        txtParticolare.Text = value;
        //acParticolare.valore = value;
        checkParticolare();
      }
    }
    /// <summary>
    /// blocca il tipo lista selezionabile che non può essere cambiata
    /// </summary>
    public bool bloccaTipoLista
    {
      set
      {
        if (value)
        {
          ddlTipoLista.Enabled = false;
        }
      }
    }
    /// <summary>
    /// (pre)imposta il valore del tipo lista di prelievo
    /// </summary>
    public string valoreTipoLista
    {
      get
      {
        return ddlTipoLista.SelectedValue;
      }
      set
      {
        ddlTipoLista.SelectedValue = value;
      }
    }

    protected void ddlTipoLista_SelectedIndexChanged(object sender, EventArgs e)
    {
      // fixAutocomplete();
      checkParticolare();
    }

    protected void ddlEsponente_SelectedIndexChanged(object sender, EventArgs e)
    {
      checkParticolare();
    }

    protected void ddlFigura_SelectedIndexChanged(object sender, EventArgs e)
    {
      checkParticolare();
    }

    protected void ddlImballo_SelectedIndexChanged(object sender, EventArgs e)
    {
      checkParticolare();
    }

  }
}