public virtual async Task <Package> SetModelContentAsync(int packageId, byte[] bpmnContent, string comment = null) { if (bpmnContent == null) { throw new ArgumentNullException(nameof(bpmnContent)); } var query = this.session.Query <Package>(); query = this.session.Fetch(query, x => x.Source); query = query.Where(x => x.Id == packageId); var package = await this.session.QuerySingleAsync(query); if (package == null) { throw new ObjectNotFoundException(nameof(Package)); } package.Modified = Clock.Now; var oldContent = package.Source; //Assign new model. package.Source = new ByteArray(bpmnContent); //Create historic model. var hiModel = new HistoricModel(); hiModel.Package = package; hiModel.Created = Clock.Now; hiModel.Comment = comment; hiModel.UserId = this.context.UserId; hiModel.Content = oldContent; await this.session.SaveAsync(hiModel); await this.session.FlushAsync(); return(package); }
/// <summary> /// Recupera todas as informações relacionadas ao histórico do usuário. /// </summary> /// <param name="userID">Identificador do usuário</param> /// <param name="year">Ano para efetuar a pesquisa</param> /// <returns>HistoricModel com todas as identificações do usuário</returns> public static HistoricModel RetrieveUserHistory(Guid userID, int year) { DBConfigurations database = new DBConfigurations(); var offeredRides = (from rides in database.Ride where rides.DonorID == userID && rides.TimeFrom.Year == year select rides).ToList(); var receivedRidesUsers = (from rideUsers in database.RideUsers where rideUsers.UserID == userID select rideUsers).ToList(); var receivedAllRides = RidesManager.GetRidesFromRideUsers(receivedRidesUsers); //filtra para apenas o ano recebido var receivedRides = new List <Rides>(); foreach (var ride in receivedAllRides) { if (ride.TimeFrom.Year == year) { receivedRides.Add(ride); } } var drivedDistance = offeredRides.Select(distance => distance.Distance).Sum(); var acceptedDistance = receivedRides.Select(distance => distance.Distance).Sum(); double totalGain = 0.0; //calcula total ganho foreach (var offered in offeredRides) { if (offered.Seats != offered.RemainingSeats) { int aceitaram = offered.Seats - offered.RemainingSeats; totalGain = totalGain + Convert.ToDouble(offered.Price * aceitaram); } } double totalPaid = 0.0; //calcula total pago foreach (var received in receivedRides) { totalPaid = totalPaid + Convert.ToDouble(received.Price); } var historicModel = new HistoricModel { AcceptedDistance = acceptedDistance, DrivedDistance = drivedDistance, OfferedRides = Conversor.ListRidesToListModel(offeredRides), ReceivedRides = Conversor.ListRidesToListModel(receivedRides), TotalGain = totalGain, TotalPaid = totalPaid }; //monta LucroAnual e oferecidas foreach (var offered in offeredRides) { int mes = offered.TimeFrom.Month; double lucroNoMes = historicModel.LucroAnualOferecidas[mes]; lucroNoMes = lucroNoMes + Convert.ToDouble(offered.Price); historicModel.LucroAnualOferecidas[mes] = lucroNoMes; int caronasOferecidas = historicModel.CaronasAnuaisOferecidas[mes]; caronasOferecidas++; historicModel.CaronasAnuaisOferecidas[mes] = caronasOferecidas; } //monta pagamento anual e aceitas foreach (var received in receivedRides) { int mes = received.TimeFrom.Month; double lucroNoMes = historicModel.LucroAnualAceitas[mes]; lucroNoMes = lucroNoMes + Convert.ToDouble(received.Price); historicModel.LucroAnualAceitas[mes] = lucroNoMes; int caronasAceitas = historicModel.CaronasAnuaisAceitas[mes]; caronasAceitas++; historicModel.CaronasAnuaisAceitas[mes] = caronasAceitas; } return(historicModel); }