using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace LLNet.Tienda.MainForms.Controls
{
    public partial class ctlExencionImpuesto : UserControl
    {
        #region Declaracion de Eventos

        public event System.ComponentModel.CancelEventHandler BeforePayWithExImp;
        public event System.EventHandler PayWithExImp;

        #endregion

        public ctlExencionImpuesto()
        {
            InitializeComponent();
            if (!DesignMode)
            {
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsTienda1.GetType(), dsTienda1.TDA_V_MONEDAS.TableName), dsTienda1);
                rowMoneda.Properties.Value = GUI.CApp.bll.GetSingleValue("MonedaBase", "General");
            }

            GUI.CApp.TraducirForm(this);
        }

        public decimal? OriginalValue;

        public decimal Rate = 1;

        public decimal? Currency;

        public void AgregarPago(object pConstancia)
        {

            decimal pCurrencyValue = Convert.ToDecimal(rowMONTO.Properties.Value);

            if (pCurrencyValue == 0)
            {
                GUI.CApp.ShowMessage("El monto a abonar debe ser mayor a cero", "Exención de Impuesto", true);
                Vgc.FocusedRow = rowConstancia;
                return;
            }

            if (Utils.Helpers.ObjToStr(pConstancia) == string.Empty )
            {
                GUI.CApp.ShowMessage("Ingrese el número de constancia", "Exención de Impuesto", true);
                Vgc.FocusedRow = rowConstancia;
                return;
            }

            // Ejecuta el evento antes del pago en efectivo empresa si se ha creado
            CancelEventArgs cea = new CancelEventArgs();
            if (BeforePayWithExImp != null)
                BeforePayWithExImp(null, cea);

            // Detiene el proceso de pago en efectivo si se ha cancelado desde el evento
            if (cea.Cancel == true)
                return;


            // Obtiene los valores de pago
            decimal pValue = (OriginalValue < pCurrencyValue * Rate) ? (decimal)OriginalValue : pCurrencyValue * Rate;
            decimal pPay = pCurrencyValue * Rate;

            // Paga en efectivo
            Pagar(pValue, pPay, Rate, Currency, pCurrencyValue, rowConstancia.Properties.Value.ToString());

            // Ejecuta el evento despues del pago en efectivo empresa
            if (PayWithExImp != null)
                PayWithExImp(pPay, null);

        }

        #region Pago con exencion de impuesto

        /// <summary>
        /// Pago en Efectivo Empresa
        /// </summary>
        public void Pagar(decimal pValue, decimal pPay, decimal pRate, decimal? pCurrency, decimal pCurrencyValue, string pConstancia)
        {
            Forms.frmPayments payment = ((Forms.frmPayments)FindForm());

            if (payment.beforePay(pValue) == -1) return;

            Model.PDV.DsPDV.WMS_PAGO_DOCUMENTOSRow pdr = payment.DsRecibo.WMS_PAGO_DOCUMENTOS.NewWMS_PAGO_DOCUMENTOSRow();

            pdr.DOCUMENTO = payment.DsRecibo.WMS_DOCUMENTOS[0].DOCUMENTO;
            pdr.TIPO_PAGO = 12;
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("DOCUMENTO", (payment.DsRecibo.WMS_DOCUMENTOS[0].DOCUMENTO).ToString());
            pdr.LINEA = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("SiguienteLineaPago", qp, "PDV")) + payment.DsRecibo.WMS_PAGO_DOCUMENTOS.Rows.Count;
            pdr.VALOR = pValue;
            pdr.PAGADO = pPay;
            pdr.TASA_CAMBIO = pRate;
            pdr.CONSTANCIA_EXENCION = pConstancia;

            if (pCurrency != null)
            {
                pdr.MONEDA = (decimal)pCurrency;
            }

            pdr.VALOR_MONEDA = pCurrencyValue;
            pdr.FECHA = DateTime.Now;

            payment.DsRecibo.WMS_PAGO_DOCUMENTOS.AddWMS_PAGO_DOCUMENTOSRow(pdr);
            payment.exencionEfectuada = true;
        }
        #endregion

        private void txtConstancia_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                AgregarPago(((DevExpress.XtraEditors.TextEdit)sender).EditValue);
            }
        }
    }
}
