//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Convierte un tipo de moneda en otro</summary> internal static decimal Convert(decimal prec, Mnd oldMoney, Mnd newMoney) { if (newMoney == oldMoney) { return(prec); } var precCuc = prec; switch (oldMoney) { case Mnd.Usd: precCuc *= UsdToCuc; break; case Mnd.Cup: precCuc *= CupToCuc; break; case Mnd.Dop: precCuc *= DopToUsd * UsdToCuc; break; } var precConv = precCuc; switch (newMoney) { case Mnd.Usd: precConv = precCuc / UsdToCuc; break; case Mnd.Cup: precConv = precCuc * CucToCup; break; case Mnd.Dop: precConv = precCuc / DopToUsd / UsdToCuc; break; } return(precConv); }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Obtiene la cantidad de dinero representada por 'text' en CUC</summary> public static decimal GetCucValue(string text, Mnd DefMoney = Mnd.Cuc) { LastMoney = DefMoney; LastValue = GetValue(text, ref LastMoney); return(Convert(LastValue, LastMoney, Mnd.Cuc)); }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Se llama cuando se selecciona una venta en la tabla de ventas</summary> private void OnSelectProd(DataGridViewRow Row) { ClearDatosVenta(); if (FillProd) { GridProds.ClearSelection(); return; } NowItemId = (int)Row.Cells[0].Value; NowItem = (string)Row.Cells[1].Value; var sCant = (string)Row.Cells[2].Value; NowPrec = (decimal)Row.Cells[3].Value; NowMond = (Mnd)(int)Row.Cells[5].Value; var Parts = sCant.Split('/'); int.TryParse(Parts[0], out NowMaxCant); int.TryParse(Parts[1], out NowCant); txtProdItem.Text = NowItem + " (quedan " + NowMaxCant + " de " + NowCant + ")"; txtProdPrecio.Text = NowPrec.ToString("0.####"); cbProdMond.SelectedIndex = (int)NowMond; NowCant = 1; txtProdCant.Text = NowCant.ToString(); txtProdMonto.Text = (NowCant * NowPrec).ToString("0.####"); txtProdComent.Text = ""; }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary> Calcula valores de la fila</summary> private void RowCalculate(ComprasRow row) { var ratioRecp = 1m; if (Datos.CompasCUC != 0) { ratioRecp = Datos.MontoInvers / Datos.CompasCUC; // Relación entre en monto de la inversión y el de las compras } var PrecRecp = ratioRecp * row.valCucItem; // Precio de recueración de la inversión nowMond = (Mnd)row.moneda; nowPrec = row.precio; nowCant = row.count; if (nowMond != Mnd.Cuc) { nowPrec = Money.Convert(nowPrec, nowMond, Mnd.Cuc); } nowMonto = nowPrec * nowCant; // Valor del venta completa (en cuc) nowGanc = (nowCant * nowPrec) - (nowCant * PrecRecp); // Ganancia neta if (PrecRecp != 0) { nowRate = (double)(nowPrec / PrecRecp); // Relación entre el precio y el precio de recuperación } else { nowRate = (double)nowPrec; } }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary></summary> private void GetValores() { nowDesc = txtSrc.Text; if (nowDesc.Trim().Length == 0) { throw new Exception("Debe indicar una descripción"); } nowMoneda = (Mnd)cbMoneda.SelectedIndex; if (!decimal.TryParse(txtChange.Text, out nowCambio)) { throw new Exception("El valor del cambio es incorrecto"); } if (!decimal.TryParse(txtValue.Text, out nowValue)) { throw new Exception("El valor del presupuesto es incorrecto"); } if (nowMoneda != Mnd.Cuc && nowMoneda != Mnd.Usd) { nowValue = Money.Convert(nowValue, nowMoneda, Mnd.Cuc); nowMoneda = Mnd.Cuc; } }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary></summary> internal static decimal GetValue(string text, ref Mnd moneyType) { var sNum = new StringBuilder(); var sMoneda = new StringBuilder(); bool noPunto = true; for (int i = 0; i < text.Length; i++) { var c = text[i]; if (c == ' ') { continue; } var noNum = (sNum.Length == 0); var noMoneda = (sMoneda.Length == 0); if (c == '-' && noNum && noMoneda) { sNum.Append(c); } else if (c == '.' && noPunto && noMoneda) { sNum.Append(c); noPunto = false; } else if (char.IsDigit(c) && noMoneda) { sNum.Append(c); } else if (char.IsLetter(c) && moneyType >= 0) { sMoneda.Append(c); } else { throw new Exception("Caracter no válido para el valor esperado"); } } var val = decimal.Parse(sNum.ToString()); if (sMoneda.Length != 0) { moneyType = Money.Idx(sMoneda.ToString()); if (moneyType == Mnd.NA) { throw new Exception("El tipo de moneda no es reconocido"); } } return(val); }
//----------------------------------------------------------------------------------------------------------------------------------- /// <summary>Selecciona la fila Row para edicción</summary> private void OnSelectVenta(DataGridViewRow Row) { txtPagoCuc.Text = ""; txtPagoMn.Text = ""; txtPagoComent.Text = ""; NowVentId = (int)Row.Cells[0].Value; var sItem = Row.Cells[1].Value.ToString(); var row = Datos.tableVentas.FindByid(NowVentId); if (row == null) { MessageBox.Show("No se encontro una venta con el código especificado"); return; } NowVend = row.vendedor; NowPrec = row.precio; NowMond = (Mnd)row.moneda; var Cant = row.count; var Pagado = GetPagado(row); var Monto = (Cant * NowPrec) - Pagado; NowCantMax = Monto / NowPrec; chkCUC.Checked = chkCUP.Checked = false; if (NowMond == Mnd.Cuc) { txtPagoCuc.Text = Monto.ToString("0.####"); chkCUC.Checked = true; } else { txtPagoMn.Text = Monto.ToString("0.####"); chkCUP.Checked = true; } var NPagados = Cant - NowCantMax; txtPagoItem.Text = sItem + " | Pagados " + NPagados.ToString("0.##") + " de " + row.count; txtPagoCant.Text = NowCantMax.ToString("0.##"); txtPagoComent.Text = NowVentId.ToString(); if (!row.IscomentarioNull() && row.comentario.Trim().Length > 0) { txtPagoComent.Text += " - " + row.comentario; } }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Obtiene el código de 3 letras que represeta la moneda</summary> internal static string Code(Mnd moned) { switch (moned) { case Mnd.Usd: return("usd"); case Mnd.Cup: return("mn"); case Mnd.Dop: return("dop"); } return("cuc"); }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Limpia los datos de venta</summary> private void ClearDatosVenta() { NowItemId = -1; NowItem = ""; NowPrec = 0m; NowMond = 0; NowCant = 0; NowMaxCant = 0; txtProdItem.Text = txtProdComent.Text = txtProdCant.Text = txtProdPrecio.Text = ""; cbProdMond.SelectedIndex = 0; ((frmUnViaje)Parent.Parent.Parent).AcceptButton = null; }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Muestra los datos para modificar del producto cuyo ID es 'IdProd'</summary> private void OnSelectProduct(int IdProd) { var Row = table.FindByid(IdProd); if (Row == null) { return; } ((frmUnViaje)Parent.Parent.Parent).AcceptButton = btnModify; txtItem.Text = Row.item; var ratioRecp = 1m; var ratioGanc = 1m; if (Datos.CompasCUC != 0) { ratioRecp = Datos.MontoInvers / Datos.CompasCUC; // Relación entre en monto de la inversión y el de las compras ratioGanc = (1.5m * Datos.MontoInvers) / Datos.CompasCUC; } var valRecp = ratioRecp * Row.valCucItem; var valGanc = ratioGanc * Row.valCucItem; lbPrecRec.Text = valRecp.ToString("0.##"); lbPrecOK.Text = valGanc.ToString("0.##"); var ItemPrec = valGanc; // Toma valores por defecto Mnd Moned = Mnd.Cuc; if (Row.precio > 0) { ItemPrec = Row.precio; Moned = (Mnd)Row.moneda; } SetMoney(Moned); txtValue.Text = ItemPrec.ToString("0.##"); if (Moned != Mnd.Cuc) { ItemPrec = Money.Convert(ItemPrec, Moned, Mnd.Cuc); } lbItemGanc.Text = (ItemPrec - valRecp).ToString("0.##"); //txtValue.Focus(); RefreshStadist(); }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Se llama cuando se cambia el tipo de moneda en el combo correspondiente</summary> private void cbMoneda_SelectedIndexChanged(object sender, EventArgs e) { Mnd selMoney = (Mnd)cbMoneda.SelectedIndex; decimal prec; if (decimal.TryParse(txtValue.Text, out prec)) { var precConv = Money.Convert(prec, nowMond, selMoney); txtValue.Text = precConv.ToString("0.00"); } nowMond = selMoney; }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Limpia los datos del producto actual</summary> private void ClearDatos() { NowItemId = -1; NowItem = ""; NowPrec = 0m; NowMond = 0; NowCant = 0; NowMaxCant = 0; txtItem.Text = ""; txtValue.Text = ""; txtCant.Text = ""; cbMoneda.SelectedIndex = 0; ((frmUnViaje)Parent.Parent.Parent).AcceptButton = null; }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Actauliza los datos de la venta seleccionada en los controles de modificación</summary> private void OnSelectVenta(DataGridViewRow Row) { pnlDatos.Visible = true; // Garantiza que se muestre la zona de datos NowVentId = (int)Row.Cells[0].Value; NowItem = (string)Row.Cells[1].Value; NowVend = (string)Row.Cells[2].Value; NowCant = (int)Row.Cells[3].Value; NowPrec = (decimal)Row.Cells[4].Value; NowMond = Money.Idx((string)Row.Cells[6].Value); NowMaxCant = NowCant; NowItem = NowItem.Split('|')[0]; txtItem.Text = NowVentId.ToString() + " | " + NowItem; txtCant.Text = NowCant.ToString(); txtValue.Text = NowPrec.ToString("0.####"); txtMonto.Text = (NowCant * NowPrec).ToString("0.####"); var row = Datos.BD.Ventas.FindByid(NowVentId); if (row != null) { txtComent.Text = (row.IscomentarioNull())? "" : row.comentario; } txtVendedor.Text = NowVend; cbMoneda.SelectedIndex = (int)NowMond; SetWorkMode(3); if (NowCant < 0) { btnProdBack.Visible = false; } ((frmUnViaje)Parent.Parent.Parent).AcceptButton = btnModify; }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Obtiene los valores introducidos por el usuario</summary> private void GetValores() { var ItemVend = cbProdVend.SelectedItem; if (ItemVend == null) { throw new Exception("Debe seleccionar un vendedor"); } NowVend = ItemVend.ToString(); if (NowItemId == -1 || NowItem == "") { throw new Exception("No hay un item seleccionado para la venta"); } NowMond = (Mnd)cbProdMond.SelectedIndex; if ((int)NowMond == -1) { throw new Exception("Debe seleccionar la moneda a utilizar"); } if (!decimal.TryParse(txtProdPrecio.Text, out NowPrec)) { throw new Exception("El valor para el precio es incorrecto"); } if (!int.TryParse(txtProdCant.Text, out NowCant) || NowCant <= 0) { throw new Exception("El valor para la cantidad es incorrecto"); } if (NowCant > NowMaxCant) { throw new Exception("La cantidad de items especificados excede los disponibles"); } }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary> Pone el timpo de moneda vigente para el precio</summary> private void SetMoney(Mnd v) { nowMond = v; cbMoneda.SelectedIndex = (int)v; }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Llena la lista de selección de productos</summary> private void FillGridProds() { FillProd = true; tbSelProd.Clear(); CalculateCounts(); decimal porVenderCuc = 0, porVenderMn = 0; foreach (ComprasRow row in Datos.tableCompras) { var idProd = row.id; if (Datos.FilterProd(idProd)) { continue; } var Item = row.item; var Cant = row.count; var Precio = row.precio; Mnd Moned = (Mnd)row.moneda; string MondCode = Money.Code(Moned); var Resto = Cant; if (Counts.ContainsKey(idProd)) { Resto -= Counts[idProd]; } if (Resto > 0) { var monto = Resto * Precio; if (Moned == Mnd.Cuc) { porVenderCuc += monto; } else if (Moned == Mnd.Cup) { porVenderMn += monto; } else { porVenderCuc += Money.Convert(monto, Moned, Mnd.Cuc); } } var sCant = Resto.ToString() + '/' + Cant; if (Resto > 0 || chkShowNoExist.Checked) { tbSelProd.Rows.Add(idProd, Item, sCant, Precio, MondCode, Moned); } } var sCuc = porVenderCuc.ToString("0.##"); var sCup = porVenderMn.ToString("0.##"); porVenderCuc += Money.Convert(porVenderMn, Mnd.Cup, Mnd.Cuc); var sTotal = porVenderCuc.ToString("0.##"); lbPorVender.Text = "POR VENDER: " + sCuc + " cuc " + sCup + " mn TOTAL:" + sTotal + " cuc"; FillProd = false; }
public static decimal DopToUsd = 1.0m / UsdToDop; // Febrero 2018 //-------------------------------------------------------------------------------------------------------------------------------------- /// <summary></summary> internal static decimal GetValue(string text) { Mnd moneyType = Mnd.NA; return(GetValue(text, ref moneyType)); }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Modifica los datos de una venta</summary> private void btnModify_Click(object sender, EventArgs e) { try { if (!int.TryParse(txtCant.Text, out NowCant) || NowCant < 0) { throw new Exception("El valor para la cantidad es incorrecto."); } NowMond = (Mnd)cbMoneda.SelectedIndex; if ((int)NowMond == -1) { throw new Exception("Debe seleccionar la moneda a utilizar"); } if (!decimal.TryParse(txtValue.Text, out NowPrec)) { throw new Exception("El valor para el precio es incorrecto"); } var Parts = txtItem.Text.Split('|'); NowVentId = int.Parse(Parts[0]); var row = Datos.BD.Ventas.FindByid(NowVentId); if (row == null) { throw new Exception("No se encuentra la venta correspondiente"); } NowMaxCant = ItemRemanet(row.idProd, NowVentId); if (NowCant > NowMaxCant) { throw new Exception("La cantidad máxima de items permitidos es " + NowMaxCant); } var fecha = DateTime.Today; if (row.vendedor == Datos.Vendedores[0]) { NowPrec = 0; } row.count = NowCant; row.precio = NowPrec; row.moneda = (int)NowMond; row.fecha = fecha; row.comentario = txtComent.Text; var Monto = NowCant * NowPrec; var sMoneda = Money.Code(NowMond); foreach (DataRow row2 in tbVentas.Rows) { if ((int)row2["IdVent"] == NowVentId) { row2["Cant"] = NowCant; row2["Precio"] = NowPrec; row2["Monto"] = Monto; row2["Moned"] = sMoneda; row2["Fecha"] = fecha; var sItem = ((string)row2["Item"]).Split('|')[0].TrimEnd(); row2["Item"] = sItem; if (chkShowComent.Checked) { row2["Item"] += " | " + row.comentario; } break; } } SetWorkMode(0); RefreshEstadisticas(); Datos.SetChanges("VentaModify"); } catch (Exception exc) { MessageBox.Show("ERROR: " + exc.Message); } }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Transforma el valor 'val' en la moneda actual, al valor en la moneda 'moneda'</summary> private decimal ValFromNow(decimal val, Mnd moneda) { return(Money.Convert(val, NowMond, moneda)); }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Transforma el valor 'val' en la moneda 'moneda', al valor de la monerada actual</summary> private decimal ValToNow(decimal val, Mnd moneda) { return(Money.Convert(val, moneda, NowMond)); }
//-------------------------------------------------------------------------------------------------------------------------------------- /// <summary>Llena la lista de selección de productos</summary> public void FillTableProdsSinVender(DataTable table, string sFilter) { CalculateCounts(); var ratioRecp = 1m; var ratioGanc = 1m; if (CompasCUC != 0) { ratioRecp = MontoInvers / CompasCUC; // Relación entre en monto de la inversión y el de las compras ratioGanc = (1.5m * MontoInvers) / CompasCUC; } foreach (ComprasRow row in tableCompras) { var idProd = row.id; if (App.FilterFor(-1, idProd)) { continue; } var Item = row.item; var Cant = row.count; var Precio = row.precio; Mnd Moned = (Mnd)row.moneda; var sMond = MD.Code(Moned); var valCosto = MD.Convert(row.valCucItem, Mnd.Cuc, Moned); var valRecp = ratioRecp * valCosto; var valGanc = ratioGanc * valCosto; var Resto = Cant; if (Counts.ContainsKey(idProd)) { Resto -= Counts[idProd]; } if (Resto <= 0) { continue; } if (!FindFilter(sFilter, Item)) { continue; } var monto = Resto * Precio; if (Moned != Mnd.Cuc && Moned != Mnd.Cup) { monto = MD.Convert(monto, Moned, Mnd.Cuc); Moned = Mnd.Cuc; } var n = table.Rows.Count + 1; var sCant = Resto.ToString() + " | " + Cant; var sCosto = valCosto.ToString("0.##"); var sRecup = valRecp.ToString("0.##"); var sGananc = valGanc.ToString("0.##"); var sPrecio = Precio.ToString("0.##") + ' ' + sMond; var sMonto = monto.ToString("0.##") + ' ' + sMond; var Total = (Moned == Mnd.Cuc)? monto : MD.Convert(monto, Moned, Mnd.Cuc); if (Resto == 1) { sMonto = ""; } // idxViaje, Num, Viaje, ID, Item, Cant, Costo, CostoRec, CostoOK, Precio, Monto, Total // int, int, Str, Str, Str, Str, Str, Str, Str, Str, Str, dec table.Rows.Add(IdxV, n, Title, idProd, Item, sCant, sCosto, sRecup, sGananc, sPrecio, sMonto, Total); } }