/// <summary> /// Calcula los valores del registro seleccionado /// </summary> private void CalcularTotalesItems(ECMP_OrdenServicioDetalle ObjECMP_OrdenServicioDetalle) { try { var varObjECMP_OrdenServicio = (ECMP_OrdenServicio)MyHeader.DataContext; //factura if (rbIncluidoIGV.IsChecked.Value) { //Calculo con incluir IGV decimal dmlPrecioUnitario = decimal.Round((ObjECMP_OrdenServicioDetalle.PrecioUnitarioTemp / ((decimal.Round(varObjECMP_OrdenServicio.IGV * 100, 2) + 100) / 100)), 8); decimal dmlImporte = decimal.Round((dmlPrecioUnitario * ObjECMP_OrdenServicioDetalle.Cantidad), 8); decimal dmlImporteIGV = decimal.Round(dmlImporte * varObjECMP_OrdenServicio.IGV, 8); ObjECMP_OrdenServicioDetalle.PrecioUnitario = dmlPrecioUnitario; ObjECMP_OrdenServicioDetalle.Importe = dmlImporte; ObjECMP_OrdenServicioDetalle.ImporteIGV = dmlImporteIGV; } else if (rbExonerado.IsChecked.Value) { //Calculo cuando es Honorario decimal dmlTasa = 0; decimal dmlImporte = ObjECMP_OrdenServicioDetalle.PrecioUnitarioTemp * ObjECMP_OrdenServicioDetalle.Cantidad; if (chkAplicarRetencion.IsChecked.Value) { dmlTasa = (SGCMethod.GetTasaHonorario(dmlImporte) / 100); } decimal dmlImporteIGV = (dmlImporte * dmlTasa); ObjECMP_OrdenServicioDetalle.PrecioUnitario = decimal.Round(ObjECMP_OrdenServicioDetalle.PrecioUnitarioTemp, 8); ObjECMP_OrdenServicioDetalle.Importe = decimal.Round(dmlImporte, 8); ObjECMP_OrdenServicioDetalle.ImporteIGV = decimal.Round(dmlImporteIGV, 8); } else { //Calculo sin incluir IGV decimal dmlImporte = decimal.Round((ObjECMP_OrdenServicioDetalle.PrecioUnitarioTemp * ObjECMP_OrdenServicioDetalle.Cantidad), 8); decimal dmlImporteIGV = decimal.Round(dmlImporte * varObjECMP_OrdenServicio.IGV, 8); ObjECMP_OrdenServicioDetalle.PrecioUnitario = ObjECMP_OrdenServicioDetalle.PrecioUnitarioTemp; ObjECMP_OrdenServicioDetalle.Importe = dmlImporte; ObjECMP_OrdenServicioDetalle.ImporteIGV = dmlImporteIGV; } CalcularTotales(); } catch (Exception) { } }
/// <summary> /// Calculta los totales /// </summary> private void CalcularTotales() { try { var varObjECMP_OrdenServicio = (ECMP_OrdenServicio)MyHeader.DataContext; var ListECMP_OrdenServicioDetalle = (dgDetalleServicio.Items.OfType <ECMP_OrdenServicioDetalle>()).ToList(); if (ListECMP_OrdenServicioDetalle != null && ListECMP_OrdenServicioDetalle.Count > 0) { decimal dmlTotal = 0; decimal dmlGravada = 0; decimal dmlImporteRetencionIGV = 0; //factura if (rbIncluidoIGV.IsChecked.Value) { //Calculo con incluir IGV dmlGravada = ListECMP_OrdenServicioDetalle.Sum(x => (x.ObjEMNF_Servicio.ObjEMNF_OperacionIGV.CodOperacionIGV == "GB" ? x.Importe : 0)); dmlImporteRetencionIGV = ListECMP_OrdenServicioDetalle.Sum(x => (x.ObjEMNF_Servicio.ObjEMNF_OperacionIGV.CodOperacionIGV == "GB" ? x.ImporteIGV : 0)); dmlTotal = dmlGravada + dmlImporteRetencionIGV; lblTitleOrdenServicio02.Text = "Gravada"; lblTitleOrdenServicio03.Text = "IGV " + decimal.Round(varObjECMP_OrdenServicio.IGV * 100, 2) + "%"; lblTitleOrdenServicio04.Text = "Importe Total " + ObjECMP_OrdenServicio.ObjESGC_Moneda.Simbolo; strNetoText = "Importe Total"; } else if (rbExonerado.IsChecked.Value) { //Calculo cuando es Honorario dmlGravada = ListECMP_OrdenServicioDetalle.Sum(o => o.Importe); decimal dmlTasa = (SGCMethod.GetTasaHonorario(dmlGravada) / 100); dmlImporteRetencionIGV = dmlGravada * dmlTasa; dmlTotal = dmlGravada - dmlImporteRetencionIGV; lblTitleOrdenServicio02.Text = "Total Honorario"; lblTitleOrdenServicio03.Text = "Retención " + decimal.Round(dmlTasa * 100, 2) + "%"; lblTitleOrdenServicio04.Text = "Total Neto " + ObjECMP_OrdenServicio.ObjESGC_Moneda.Simbolo; strNetoText = "Total Neto"; } else { //Calculo sin incluir IGV ListECMP_OrdenServicioDetalle.ForEach(x => { if (x.ObjEMNF_Servicio.ObjEMNF_OperacionIGV.CodOperacionIGV == "GB") { dmlGravada += x.PrecioUnitario * x.Cantidad; } }); dmlImporteRetencionIGV = dmlGravada * varObjECMP_OrdenServicio.IGV; dmlTotal = dmlGravada + dmlImporteRetencionIGV; lblTitleOrdenServicio02.Text = "Gravada"; lblTitleOrdenServicio03.Text = "IGV " + decimal.Round(varObjECMP_OrdenServicio.IGV * 100, 2) + "%"; lblTitleOrdenServicio04.Text = "Importe Total " + ObjECMP_OrdenServicio.ObjESGC_Moneda.Simbolo; strNetoText = "Importe Total"; } var First = ListECMP_OrdenServicioDetalle.FirstOrDefault(); if (First.ObjEMNF_Servicio.ObjEMNF_OperacionIGV.CodOperacionIGV == "EX" && !rbExonerado.IsChecked.Value) { lblTitleOrdenServicio02.Text = "Exonerado"; lblTitleOrdenServicio03.Text = "IGV " + decimal.Round(varObjECMP_OrdenServicio.IGV * 100, 2) + "%"; lblTitleOrdenServicio04.Text = "Importe Total " + varObjECMP_OrdenServicio.ObjESGC_Moneda.Simbolo; strNetoText = "Importe Total"; } txtLineas.Text = ListECMP_OrdenServicioDetalle.Count.ToString(); txtGravada.Text = decimal.Round(dmlGravada, 2).ToString("###,###,##0.#0"); txtImporteIGV.Text = decimal.Round(dmlImporteRetencionIGV, 2).ToString("###,###,##0.#0"); txtTotal.Text = Convert.ToDouble(dmlTotal).ToString("N2"); } else { txtLineas.Text = ("0"); txtGravada.Text = ("0.00"); txtImporteIGV.Text = ("0.00"); txtTotal.Text = ("0.00"); } dgDetalleServicio.Items.Refresh(); } catch (Exception) {} }