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;

namespace LLNet.Tienda.MainForms.Forms
{
    public partial class FrmDevolFac : Form
    {
        decimal docu;

        Model.PDV.DsPDV.TDA_DETALLE_PEDIDORow Pedido;

        public Model.PDV.DsPDV DataSource
        {
            get
            {
                if (!DesignMode)
                    return Program.FrmMainPos.DsPedido as Model.PDV.DsPDV;
                else
                    return null;
            }
        }

        public FrmDevolFac()
        {
            InitializeComponent();
        }

        private void obtenerArticulos(decimal pdocumento)
        {
            Utils.QueryParams param = new LLNet.Utils.QueryParams();
            param.AddReplaceParam("DOCU", pdocumento.ToString());

            Program.prueba = GUI.CApp.bll.getDataSet("PDV", "ListaArticulos", param);
            dgvDevFacCom.DataSource = Program.prueba.Tables[0];
        }

        private void buscardocumento()
        {
            if (txtSerie.Text == null || txtSerie.Text == "")
            {
                GUI.CApp.ShowMessage("La serie no puede estar en blanco", "ERROR", true);
                txtSerie.Focus();
            }
            else
            {
                if (txtNoDoc.Text == null || txtNoDoc.Text == "")
                {
                    GUI.CApp.ShowMessage("El numero de documento no puede estar en blanco", "ERROR", true);
                    txtNoDoc.Focus();
                }
                else
                {
                    label4.Text = "Detalle de Articulos: " + txtSerie.Text.Trim() + "-" + txtNoDoc.Text.Trim();

                    Utils.QueryParams param = new LLNet.Utils.QueryParams();
                    param.AddReplaceParam("SERIE", txtSerie.Text.Trim());
                    param.AddReplaceParam("NODOC", txtNoDoc.Text.Trim());
                    docu = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("ObtenerDOC", param, "PDV"));

                    if (docu == null || docu == 0)
                    {
                        GUI.CApp.ShowMessage("La factura no existe", "ERROR", true);
                    }
                    else
                    {
                        obtenerArticulos(docu);
                    }

                    param.Clear();
                }
            }
        }

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

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            buscardocumento();
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            Utils.QueryParams param = new LLNet.Utils.QueryParams();
            Controls.ctlAddSkus ctlAddSkus1 = new MainForms.Controls.ctlAddSkus();
            Model.PDV.DsPDV.TDA_DETALLE_PEDIDORow DsPedido = DataSource.TDA_DETALLE_PEDIDO.NewTDA_DETALLE_PEDIDORow();

            string pskualt;
            decimal pcantidad, pprecio, pimpuesto, pdescuento, pdocupad, plinea; 

            param.AddReplaceParam("DOCU", docu.ToString());
            if (Convert.ToInt16(GUI.CApp.bll.GetSingleValue("ValidarNC", param, "PDV")) == 0)
            {
                pdocupad = docu;
                for (int i = 0; i < dgvDevFacCom.Rows.Count; i++)
                {
                    pskualt = dgvDevFacCom.Rows[i].Cells[2].Value.ToString();
                    pcantidad = Convert.ToDecimal(dgvDevFacCom.Rows[i].Cells[1].Value) * -1;
                    pprecio = Convert.ToDecimal(dgvDevFacCom.Rows[i].Cells[4].Value);
                    pimpuesto = Convert.ToDecimal(dgvDevFacCom.Rows[i].Cells[5].Value);
                    pdescuento = Convert.ToDecimal(dgvDevFacCom.Rows[i].Cells[6].Value);
                    plinea = Convert.ToDecimal(dgvDevFacCom.Rows[i].Cells[0].Value);

                    ctlAddSkus1.InsertOrderLine(pskualt, pcantidad, GUI.CApp.usuario, pprecio, pimpuesto, pdescuento, pdocupad, plinea);

                    cargar_dataset(i);

                }
                DialogResult = DialogResult.OK;
            }
            else
            {
                GUI.CApp.ShowMessage("La factura ya tiene una nota de credito asociada", "ERROR", true);
            }
        }
        
        private void cargar_dataset(int linea)
        {
            Pedido = DataSource.TDA_DETALLE_PEDIDO.NewTDA_DETALLE_PEDIDORow();

            Pedido.DOCUMENTO = GUI.CApp.Document;
            Pedido.LINEA = linea + 1;
            Pedido.SKU_ALTERNO = dgvDevFacCom.Rows[linea].Cells[2].Value.ToString();
            Pedido.CANTIDAD = Convert.ToDecimal(dgvDevFacCom.Rows[linea].Cells[1].Value) * -1;
            Pedido.PRECIO_UNITARIO = Convert.ToDecimal(dgvDevFacCom.Rows[linea].Cells[4].Value);
            Pedido.PCT_DESCUENTO = Convert.ToDecimal(dgvDevFacCom.Rows[linea].Cells[8].Value);
            Pedido.DESCUENTO = Convert.ToDecimal(dgvDevFacCom.Rows[linea].Cells[6].Value);
            Pedido.IMPUESTO = Convert.ToDecimal(dgvDevFacCom.Rows[linea].Cells[5].Value);
            Pedido.PRECIO_CLIENTE = Convert.ToDecimal(dgvDevFacCom.Rows[linea].Cells[7].Value);
            Pedido.TOTAL_LINEA = Convert.ToDecimal(dgvDevFacCom.Rows[linea].Cells[7].Value);
            Pedido.DOCUMENTO_PADRE3 = docu;
            Pedido.DESCRIPCION = "     - " + dgvDevFacCom.Rows[linea].Cells[2].Value.ToString() + "        " + dgvDevFacCom.Rows[linea].Cells[3].Value.ToString() + "                                " 
                                       + dgvDevFacCom.Rows[linea].Cells[4].Value.ToString() + " - " + dgvDevFacCom.Rows[linea].Cells[6].Value.ToString();
           
            DataSource.TDA_DETALLE_PEDIDO.AddTDA_DETALLE_PEDIDORow(Pedido);
            DataSource.TDA_DETALLE_PEDIDO.AcceptChanges();
        }
        
        private void txtNoDoc_KeyPress(object sender, KeyPressEventArgs e)
        {

        }

    }
}
