コード例 #1
0
 public AcceptedItemsPage(DonationStatus status)
 {
     InitializeComponent();
     viewModel           = new AcceptedItemsViewModel(status);
     this.BindingContext = viewModel;
     MessagingCenter.Subscribe <AcceptedDetailViewModel, Donation>(this, "PickupCancelled", OnItemCancelled);
 }
コード例 #2
0
 public DonationListViewModel(DonationStatus status)
 {
     this.donationRepository = new DonationRepository();
     Title            = (status == DonationStatus.PendingPickup? "Pending " : status.ToString("G")) + " Donations";
     Items            = new ObservableCollection <Donation>();
     LoadItemsCommand = new Command(async() => await ExecuteLoadItemsAsync(status), () => !IsBusy);
 }
コード例 #3
0
ファイル: DonationRepository.cs プロジェクト: papyr/Fundraise
        public Donation Create(Campaign campaign, Fundraiser fundraiser, DonationStatus status, double amount, string currencyCode,
                               double amountInDefaultCurrency, string donorUserId, string donorDisplayName = null, string referenceNumber = null)
        {
            if (fundraiser != null && fundraiser.CampaignId != campaign.Id) // validate campaign
            {
                throw new InvalidOperationException("fundraiser campaign id does not match");
            }

            var donation = new Donation
            {
                Campaign                = campaign,
                Fundraiser              = fundraiser,
                Status                  = status,
                Amount                  = amount,
                CurrencyCode            = currencyCode,
                AmountInDefaultCurrency = amountInDefaultCurrency,
                DonorUserId             = donorUserId,
                DonorDisplayName        = donorDisplayName,
                ReferenceNumber         = referenceNumber,
                DateCreated             = DateTime.Now,
                DateLastUpdated         = DateTime.Now
            };

            if (currencyCode == campaign.DefaultCurrencyCode && amount != amountInDefaultCurrency)
            {
                throw new InvalidOperationException("invalid amount (does not match amount in default currency)");
            }

            _context.Donations.Add(donation);
            _context.SaveChanges();
            return(donation);
        }
コード例 #4
0
        async Task ExecuteLoadItemsAsync(DonationStatus status)
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            try
            {
                Items.Clear();
                var items = await donationRepository.GetDonationsByDonorAsync(status);

                foreach (var item in items)
                {
                    Items.Add(item);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                IsBusy = false;
            }
        }
コード例 #5
0
        public AcceptedItemsViewModel(DonationStatus status)
        {
            LoadItemsCommand = new Command(async() => await ExecuteLoadItemsCommand(status));
            donationRep      = new DonationRepository();
            Items            = new ObservableCollection <Donation>();
            string statusString = status == DonationStatus.PendingPickup ? "Pending Pickup" : status.ToString("G");

            Title = statusString;
        }
コード例 #6
0
 public DonationListPage(DonationStatus status)
 {
     InitializeComponent();
     this.BindingContext = viewModel = new DonationListViewModel(status)
     {
         Page = this
     };
     MessagingCenter.Subscribe <DonationDetailViewModel, Donation>(this, "StatusChanged", OnStatusChanged);
 }
コード例 #7
0
        public IActionResult Post([FromBody] DonationStatus status)
        {
            _repository.Status.CreateStatus(status);
            _repository.Save();

            return(CreatedAtAction("GetById", new { id = status.Id }, new
            {
                Status = status
            }
                                   ));
        }
コード例 #8
0
        public IActionResult Put(long id, [FromBody] DonationStatus status)
        {
            var statusFromDb = _repository.Status.GetById(id, true);

            if (statusFromDb == null)
            {
                return(NotFound());
            }

            statusFromDb.Name = status.Name;
            _repository.Save();

            return(NoContent());
        }
コード例 #9
0
        public IActionResult GetDonorDonations(DonationStatus status)
        {
            var user = userRepository.GetUserFromPrincipal(HttpContext.User);

            if (!userRepository.IsActiveUser(user))
            {
                return(new UnauthorizedResult());
            }

            var donations = donationRepository.GetByDonorIdWithStatus(user.Id, (int)status);

            foreach (var donation in donations)
            {
                if (donation.RecipientId.HasValue)
                {
                    donation.Recipient = userRepository.GetById(donation.RecipientId.Value);
                }
            }
            return(Ok(donations));
        }
コード例 #10
0
        public IActionResult GetRecipientDonations(DonationStatus status)
        {
            var user = userRepository.GetUserFromPrincipal(HttpContext.User);

            if (!userRepository.IsActiveUser(user))
            {
                return(new UnauthorizedResult());
            }

            // Recipients can only have pending and completed donations
            if (status == DonationStatus.Wasted || status == DonationStatus.Listed)
            {
                return(BadRequest());
            }

            var donations = donationRepository.GetByRecipientIdWithStatus(user.Id, (int)status);

            foreach (var donation in donations)
            {
                donation.Donor = userRepository.GetById(donation.DonorId);
            }
            return(Ok(donations));
        }
コード例 #11
0
        // GET: Sdi
        public async Task <ActionResult> Return(string guid, int?donationId)
        {
            try
            {
                if (!donationId.HasValue)
                {
                    return(RedirectToAction("Index", "Home"));
                }

                var config = new ClientConfiguration(
                    ConfigurationManager.AppSettings["JgApiBaseUrl"],
                    ConfigurationManager.AppSettings["JGApiKey"],
                    1);

                var client = new JustGivingClient(config);

                DonationStatus donationStatus = null;
                try
                {
                    donationStatus = client.Donation.RetrieveStatus(donationId.Value);
                }
                catch
                {
                }

                if ((donationStatus != null && donationStatus.Status == "Accepted") ||
                    ConfigurationManager.AppSettings["SkipDonationReferenceCheck"] == "true")
                {
                    if (donationStatus != null)
                    {
                        _indulgeMeService.Absolve(guid, donationStatus.DonationId, donationStatus.DonationRef,
                                                  donationStatus.Amount,
                                                  donationStatus.Reference);
                    }
                    else if (ConfigurationManager.AppSettings["SkipDonationReferenceCheck"] == "true")
                    {
                        _indulgeMeService.Absolve(guid, 1, "1", 10, "not-a-real-donation");
                    }

                    var indulgence = _indulgeMeService.GetIndulgenceByGuid(guid);
                    _indulgeMeService.GenerateIndulgence(indulgence,
                                                         System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "fonts"),
                                                         System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Content"));

                    await _indulgenceEmailer.Send(indulgence, ConfigurationManager.AppSettings["IndulgencePdfRelativePath"]);

                    _indulgeMeService.Tweet(indulgence);

                    TempData["absolved"] = guid;

                    ControllerContext.RequestContext.HttpContext.Cache.Remove("siteInfo");
                    ControllerContext.RequestContext.HttpContext.Response.RemoveOutputCacheItem(Url.Action("GetLatest",
                                                                                                           "Api"));

                    ViewData["ShowBlessing"] = true;
                    return(RedirectToAction("Index", "Indulgence", new { guid = guid }));
                }

                return(HttpNotFound());
            }
            catch (Exception ex)
            {
                _log.Error("unhandled error returning from SDI", ex);
                return(new ContentResult()
                {
                    Content = ex.Message + "\r\n" + ex.StackTrace,
                    ContentEncoding = Encoding.UTF8,
                    ContentType = "text/plain"
                });
            }
        }
コード例 #12
0
        public ActionResult Absolve(int id, int?donationId)
        {
            var config = new ClientConfiguration(
                "https://api.staging.justgiving.com/",
                ConfigurationManager.AppSettings["JGApiKey"],
                1);
            var client = new JustGivingClient(config);

            DonationStatus donation = null;

            if (donationId.HasValue)
            {
                donation = client.Donation.RetrieveStatus(donationId.Value);
            }
            else
            {
                donationId = 1;
                donation   = new DonationStatus()
                {
                    Amount = new decimal(r.NextDouble() * 100), DonationId = 1, Reference = "1"
                };
            }

            var indulgence = MvcApplication.CurrentSession.Load <Indulgence>(id.ToRavenDbId("indulgences"));

            if (indulgence == null)
            {
                return(new HttpNotFoundResult());
            }

            indulgence.IsBlessed = true;
            if (donation != null)
            {
                indulgence.AmountDonated        = donation.Amount;
                indulgence.JustGivingDonationId = donationId.Value;
                indulgence.DonationReference    = donation.Reference;
            }

            var sin = MvcApplication.CurrentSession.Load <Sin>(indulgence.SinId);

            sin.TotalDonationCount++;
            if (donation != null)
            {
                sin.TotalDonated += donation.Amount;
            }

            MvcApplication.CurrentSession.SaveChanges();

            MvcApplication.TotalDonated = MvcApplication.CurrentSession
                                          .Query <Indulgence>("BlessedIndulgences").ToList().Sum(a => a.AmountDonated);

            string storagePath   = HostingEnvironment.MapPath("~/content/indulgences");
            string pdfFilename   = string.Format("{0}/indulgence.pdf", indulgence.Id.IdValue());
            string imageFilename = string.Format("{0}/indulgence.png", indulgence.Id.IdValue());

            pdfFilename   = Path.Combine(storagePath, pdfFilename);
            imageFilename = Path.Combine(storagePath, imageFilename);

            _indulgeMeService.GenerateIndulgence(pdfFilename, imageFilename, indulgence,
                                                 HostingEnvironment.MapPath("~/content"), HostingEnvironment.MapPath("~/content"));

            // if the user supplied an email address send the pdf to them
            if (!string.IsNullOrWhiteSpace(indulgence.DonorEmailAddress))
            {
                string donorEmailAddress = indulgence.DonorEmailAddress;
                string donorName         = string.IsNullOrWhiteSpace(indulgence.Name) ? "" : indulgence.Name;
                indulgenceEmailer.Send(indulgence, pdfFilename);
            }

            try
            {
                // add the indulgence to the queue to tweet
                _tweetOutbox.Add(indulgence);
            }
            catch (Exception e)
            {
                log.Error("Could not tweet!", e);
            }

            TempData["absolutionId"] = id;

            // invalidate cache
            ControllerContext.RequestContext.HttpContext.Cache.Remove("siteInfo");
            ControllerContext.RequestContext.HttpContext.Response.RemoveOutputCacheItem(Url.Action("GetLatest", "Api"));

            return(RedirectToAction("Index", "Indulgence", new { id = indulgence.Id.IdValue() }));
        }
コード例 #13
0
        public async Task <IEnumerable <Donation> > GetDonationsByRecipientAsync(DonationStatus status)
        {
            var json = await App.ApiClient.GetStringAsync($"api/donations/recipient/me/status/{status}");

            return(JsonConvert.DeserializeObject <IEnumerable <Donation> >(json));
        }
コード例 #14
0
 private bool CanWasteDonation(DonationStatus status)
 {
     return(status != DonationStatus.Wasted && status != DonationStatus.Completed);
 }
コード例 #15
0
        public async static Task <MaskDonationModel> UpdateStatus(DataContext dataContext, Guid id, DonationStatus donationStatus)
        {
            var maskDonation = await Get(dataContext, id);

            if (maskDonation == null)
            {
                throw new ErrorModelException(ErrorCode.NotFound, "Donation");
            }

            if (maskDonation.Status != donationStatus)
            {
                maskDonation.Status = donationStatus;
                if (maskDonation.Status == DonationStatus.Received)
                {
                    var maskRequest = await MaskRequest.Get(dataContext, maskDonation.RequestId);

                    maskRequest.MaskDetails.Masks = maskRequest.MaskDetails.Masks.Join(maskDonation.Donation, m => m.Type, d => d.Type, (m, d) => {
                        var quantity = m.Quantity - d.Quantity;
                        return(new MaskInfo
                        {
                            Type = m.Type,
                            Quantity = quantity >= 0 ? quantity : 0
                        });
                    }).ToList();

                    await AddDonatedMasksToAggregate(dataContext, maskDonation);
                }
            }

            return(maskDonation.ToMaskDonationModel());
        }
コード例 #16
0
        }                                  // justificativa do interessado.

        public void UpdateBookRequest(DonationStatus status, string note)
        {
            this.Status    = status;
            this.DonorNote = note;
        }
コード例 #17
0
 private bool CanRelistDonation(DonationStatus status)
 {
     return(status != DonationStatus.Completed);
 }
コード例 #18
0
 public void UpdateBookUser(DonationStatus status, string note)
 {
     this.Status = status;
     this.Note   = note;
 }
コード例 #19
0
 private bool CanCompleteDonation(DonationStatus status)
 {
     return(status == DonationStatus.PendingPickup);
 }