/// <summary> /// devuelve un boleando indicando si exite un registro de SaleAmountWith o SaleAmountOwn por venta y vendedor /// </summary> /// <history> /// [jorcanche] created 09/06/2016 /// </history> public static SalesSalesman GetSalesSalesmens(SalesSalesman salesSalesmen = null) { List <SalesSalesman> result = null; using (var dbContext = new IMEntities(ConnectionHelper.ConnectionString())) { var query = from ss in dbContext.SalesSalesmen select ss; if (salesSalesmen != null) { if (salesSalesmen.smsa != 0)//filtro por ID { query = query.Where(ss => ss.smsa == salesSalesmen.smsa); } if (!String.IsNullOrWhiteSpace(salesSalesmen.smpe))//Filtro por descripcion { query = query.Where(ss => ss.smpe == salesSalesmen.smpe); } if (salesSalesmen.smSale)//Filtro por descripcion { query = query.Where(ss => ss.smSale == true); } if (salesSalesmen.smSaleAmountOwn != 0)//Filtro por descripcion { query = query.Where(ss => ss.smSaleAmountOwn == salesSalesmen.smSaleAmountOwn); } if (salesSalesmen.smSaleAmountWith != 0)//Filtro por descripcion { query = query.Where(ss => ss.smSaleAmountWith == salesSalesmen.smSaleAmountWith); } } result = query.OrderBy(pt => pt.smsa).ToList(); } return(result.FirstOrDefault()); }
/// <summary> ///Modo edicion /// </summary> /// <history> /// [jorcanche] 14/06/2016 created /// </history> private void btnEdit_Click(object sender, RoutedEventArgs e) { btnCancel.IsEnabled = true; btnEdit.IsEnabled = false; btnSave.IsEnabled = true; smSaleColumn.IsReadOnly = smSaleAmountOwnColumn.IsReadOnly = smSaleAmountWithColumn.IsReadOnly = false; _oldList = new List <SalesSalesman>(); //Se hace un Foreach a SalesSalesmen y llenamos a _oldList, Se hace de esta forma para que no tengan la misma referencia // y asi se puede modificar uno sin q el otro cambie igual _salesSalesmans.ForEach(ag => { var ss = new SalesSalesman(); ObjectHelper.CopyProperties(ss, ag, true); _oldList.Add(ss); }); }
/// <summary> /// Guarda un Sale con asincronia y con transaction /// </summary> /// <param name="saleOld">Sale Original antes de que se modificará</param> /// <param name="saleNew">Sale despues de que se modificará</param> /// <param name="obpayments">Observable Collection de tipo Payments</param> /// <param name="isEnabledsaRefMember">Para indicar como encuentra habilitado en txtsaRefMember.enabled </param> /// <param name="hoursDifSalesRoom">La direfencia de horas del Sales Room</param> /// <param name="user">Usuario que hizo el cambio</param> /// <param name="saleAmount">El monto de la venta</param> /// <param name="lstSalesSalesman">Listado de los SalesSalesmen que se modificaron</param> /// <param name="saleAmountOriginal">El monto de la venta original</param> /// <param name="ipMachine">Ip de la maquina en el que se hizo el cambio</param> /// <param name="lstSalesSalesmenChanges">Listadoque SalesSalesmen que se remplazaron</param> /// <param name="authorizedBy">Quien autorizo los cambios</param> /// <param name="isOnlySaveSalesSalesmen">Cuando este parametro esta en "True" indica que solo se guardara los SalesSalesmens</param> /// <history> /// [jorcanche] created 02/ago/2016 /// </history> public static async Task <int> SaveSale(Sale saleOld, Sale saleNew, ObservableCollection <Payment> obpayments, bool isEnabledsaRefMember, short hoursDifSalesRoom, string user, decimal saleAmount, IEnumerable <SalesSalesman> lstSalesSalesman, decimal saleAmountOriginal, string ipMachine, IEnumerable <SalesmenChanges> lstSalesSalesmenChanges, string authorizedBy, bool isOnlySaveSalesSalesmen = false) { return(await Task.Run(() => { using (var dbContext = new IMEntities(ConnectionHelper.ConnectionString())) { using (var transaction = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.Serializable)) { try { //Si el parametro isOnlySaveSalesSalesmen esta en "True" No permitira hacer ningun movimiento mas que el de //"Guardo de los movimientos de los SalesSalesmen" if (!isOnlySaveSalesSalesmen) { #region Guardamos el Sale //***************************************************************************************************** // Guardamos el Sale //***************************************************************************************************** //1.- Guardamos cambios en el Sale si hubo cambios if (!ObjectHelper.IsEquals(saleNew, saleOld)) { dbContext.Entry(saleNew).State = EntityState.Modified; } #endregion #region Guardamos los pagos //***************************************************************************************************** // Guardamos los pagos //***************************************************************************************************** //2.- Eliminamos uno o mas registros que contengan el Id Sale en la tabla Payments //2.1.- Obtenemos los Payments que estan actualmente en la base con este Sale var lstPayments = dbContext.Payments.Where(p => p.pasa == saleNew.saID); //2.2 Si hubo Payments los eliminamos if (lstPayments.Any()) { dbContext.Payments.RemoveRange(lstPayments); } //2.3 Guardamos los nuevos Payments. foreach (var payment in obpayments) { dbContext.Entry(payment).State = EntityState.Added; } #endregion #region Marcamos las ventas como actualizadas //***************************************************************************************************** // Marcamos las ventas como actualizada //***************************************************************************************************** //3.-Si hubo cambio con la anterior venta se procede if (isEnabledsaRefMember && saleNew.saReference != saleOld.saReference) { //3.1.- si tenia venta anterior, la marcamos como actualizada if (saleOld.saReference != null) { //3.2.- marcamos la venta anterior actual como actualizada dbContext.USP_OR_UpdateSaleUpdated(saleOld.saReference, false); } //3.3.- actualizamos los vendedores del huesped en base a los vendedores de la venta dbContext.USP_OR_UpdateSaleUpdated(saleNew.saReference, true); } #endregion #region Actualizamos los vendedores del huesped en base a los vendedores de la venta //***************************************************************************************************** // Actualizamos los vendedores del huesped en base a los vendedores de la venta //***************************************************************************************************** //4.- Actualizamos dbContext.USP_OR_UpdateGuestSalesmen(saleNew.sagu, saleNew.saID); #endregion #region Si cambio de Guest ID realizamos lo cambios //***************************************************************************************************** // Si cambio de Guest ID realizamos lo cambios //***************************************************************************************************** //5.- Si hubo cambio en el sagu if (saleOld.sagu != saleNew.sagu) { //5.1.- Marcamos como venta el guest Id Nuevo dbContext.USP_OR_UpdateGuestSale(saleNew.sagu, true); //5.2.- Desmarcamos como venta el Guest Id anterior si ya no le quedan ventas if (!(from s in dbContext.Sales where s.sagu == saleNew.sagu select s).Any()) { dbContext.USP_OR_UpdateGuestSale(saleOld.sagu, false); } } #endregion } #region Guarda los movimientos de los SalesSalesmen //***************************************************************************************************** // Guarda los movimientos de los SalesSalesmen //***************************************************************************************************** //7.1.-Extraemos el Listado de los SaleMan que se modificaron //7.2.-Se elimina la propiedad virtual Persaonel para que no marque error de repeticion de llaves, // ya que personel tiene la llave de peID y la llave de la tabla SalesSaleman tiene igual la llave smpe y marcan conflicto var lstSalesSalemanAdd = new List <SalesSalesman>(); lstSalesSalesman.Where(ss => !ss.smSale || ss.smSaleAmountOwn != saleAmount || ss.smSaleAmountWith != saleAmount). ToList().ForEach(x => { var ss = new SalesSalesman(); ObjectHelper.CopyProperties(ss, x); lstSalesSalemanAdd.Add(ss); }); //7.3.- Eliminamos todos los registros de la tabla SalesSalesmen que sean de este sale var lstSalesSalesmanDelete = dbContext.SalesSalesmen.Where(salesSalesman => salesSalesman.smsa == saleNew.saID); if (lstSalesSalesmanDelete.Any()) { dbContext.SalesSalesmen.RemoveRange(lstSalesSalesmanDelete); } //7.4.- Se guardan los SalesSaleman que se modificaron foreach (var salesSalesSaleman in lstSalesSalemanAdd) { dbContext.Entry(salesSalesSaleman).State = EntityState.Added; } #endregion //Si el parametro isOnlySaveSalesSalesmen esta en "True" No permitira hacer ningun movimiento mas que el de //"Guardo de los movimientos de los SalesSalesmen" if (!isOnlySaveSalesSalesmen) { #region Guardamos el movimiento de venta del huesped //***************************************************************************************************** // Guardamos el movimiento de venta del huesped //***************************************************************************************************** //8.- Guardamos dbContext.USP_OR_SaveGuestMovement(saleNew.sagu, EnumToListHelper.GetEnumDescription(EnumGuestsMovementsType.Sale), user, Environment.MachineName, ipMachine); #endregion #region Guardamos los cambios de vendedores y la persona que autorizo los cambios //***************************************************************************************************** // Guardamos los cambios de vendedores y la persona que autorizo los cambios //***************************************************************************************************** //9.- Si No se autorizo no hacemos ningun cambio if (!string.IsNullOrEmpty(authorizedBy)) { //9.1.- Guardamos cambios foreach (var salesmenChange in lstSalesSalesmenChanges) { dbContext.USP_OR_SaveSalesmenChanges (saleNew.saID, authorizedBy, user, salesmenChange.roN, salesmenChange.schPosition, salesmenChange.schOldSalesman, salesmenChange.schNewSalesman, null, "SL"); } } #endregion } //Si no hubo ningun problema guardamos cambios var respuesta = dbContext.SaveChanges(); if (!isOnlySaveSalesSalesmen) { #region Guardamos el historico de la venta //***************************************************************************************************** // Guardamos el historico de la venta //***************************************************************************************************** //6.1.- Guardamos SaleLog dbContext.USP_OR_SaveSaleLog(saleNew.saID, hoursDifSalesRoom, user); #endregion } //Confirmamos la transaccion transaction.Commit(); return respuesta; } catch (Exception) { //De lo contrario mandamos el mensaje de error en la interfaz y realizamos un Rollback transaction.Rollback(); throw; } } } })); }