using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LLNet.Utils;
using LLNet.GUI;
using System.Threading;
using System.Diagnostics;

namespace LLNet.Tienda.MainForms.Forms.Ecommerce
{
    public partial class FrmEntregaInmediata : Form
    {
        public FrmEntregaInmediata()
        {
            InitializeComponent();
        }

        DataSet dslistado;

        private void FrmEntregaInmediata_Load(object sender, EventArgs e)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            string bodega = GUI.CApp.GetParam("BREE").ToString();

            qp.AddReplaceParam("pBODEGA", bodega);

            dslistado = GUI.CApp.bll.getDataSet("PDV", "DSListadoEcom",qp);

            if(dslistado.Tables.Count > 0)
            dgvListado.DataSource = dslistado.Tables[0];
        }

        private void dgvListado_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            string orden = dgvListado.CurrentRow.Cells[0].Value.ToString();
            TransaccionInventario(orden);
        }

        private void btnEntregar_Click(object sender, EventArgs e)
        {
            try
            {
                string orden = dgvListado.CurrentRow.Cells[0].Value.ToString();
                if (CApp.ShowMessage("Esta seguro que desea entregar la orden " + orden + " ?, esto implica que la orden NO sera preparada en CEDI para su despacho", "Entrega Inmediata Ecommerce", true, true) == DialogResult.OK)
                {                    
                    TransaccionInventario(orden);
                    //imprime el recibo
                    mImprimirFactura(orden);
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Entrega Inmediata Ecommerce", true);
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void TransaccionInventario(string orden)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pORDEN", orden);
            qp.AddReplaceParam("pUSUARIO", GUI.CApp.usuario);

            GUI.CApp.bll.ExecuteSql("EjecutarTransaccion", qp, "PDV");
        }

        #region mImprimirFactura
        /// <summary>
        /// Genera el txt de la factura y la imprime
        /// </summary>
        private void mImprimirFactura(string numorden)
        {
           
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("NUMORDEN", numorden);
            DataSet ds_encab = GUI.CApp.bll.getDataSet("PDV", "FacturasEncabezadoEcom", qp);

            string vDocumento = String.Empty;
            vDocumento = ds_encab.Tables[0].Rows[0].ItemArray[6].ToString();

            QueryParams vParams = new QueryParams();
            vParams.AddReplaceParam("DOCUMENTO", vDocumento);
            vParams.AddReplaceParam("FORMATO", "3042");
            vParams.AddReplaceParam("USUARIO", CApp.usuario.ToString());
            CApp.bll.ExecuteSql("GENERAR_IMPRESION_POS", vParams, "PDV");

            ProcessStartInfo vProcs = new ProcessStartInfo(Application.StartupPath + @"\imprimir.bat");
            vProcs.WindowStyle = ProcessWindowStyle.Hidden;
            vProcs.Arguments = vDocumento + ".txt";

            Thread.Sleep(3000); // SE LE DA TIEMPO A LA BD DE GENERAR EL ARCHIVO DE TEXTO
            //
            Process.Start(vProcs);
        }
        #endregion

    }
}
