Beispiel #1
0
        /// <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());
        }
Beispiel #2
0
 /// <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);
     });
 }
Beispiel #3
0
        /// <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;
                        }
                    }
                }
            }));
        }