private async Task SaveCompleteData(Guid notificationId, UploadCertificateViewModel model)
        {
            var fileExtension = Path.GetExtension(model.File.FileName);
            var uploadedFile  = await fileReader.GetFileBytes(model.File, User.GetAccessToken());

            var id = model.MovementId;

            await mediator.SendAsync(new SaveMovementCompletedReceipt(id, model.DateRecovered, uploadedFile, fileExtension, SystemTime.Now));
        }
        private async Task SaveReceiptData(Guid notificationId, UploadCertificateViewModel model)
        {
            var fileExtension = Path.GetExtension(model.File.FileName);
            var uploadedFile  = await fileReader.GetFileBytes(model.File, User.GetAccessToken());

            var id     = model.MovementId;
            var fileId = await mediator.SendAsync(new SaveCertificateOfReceiptFile(id, uploadedFile, fileExtension));

            await
            mediator.SendAsync(new SetMovementAccepted(id, fileId, model.DateReceived,
                                                       model.Quantity.GetValueOrDefault(), model.Unit.GetValueOrDefault(), SystemTime.Now));
        }
        public async Task <ActionResult> UploadCertificate(Guid notificationId, Guid movementId)
        {
            var movementDetails = await mediator.SendAsync(new GetMovementDetailsById(notificationId, movementId));

            var model = new UploadCertificateViewModel
            {
                Certificate      = (CertificateType)TempData[CertificateKey],
                NotificationType = (NotificationType)TempData[NotificationTypeKey],
                NotificationId   = notificationId,
                MovementId       = movementId,
                ShipmentNumber   = movementDetails.Number
            };

            if (model.Certificate == CertificateType.Receipt || model.Certificate == CertificateType.ReceiptRecovery)
            {
                //Check all the values are available
                object quantityResult;
                object unitResult;
                object dateReceivedResult;

                if (TempData.TryGetValue(DateReceivedKey, out dateReceivedResult) &&
                    TempData.TryGetValue(UnitKey, out unitResult) &&
                    TempData.TryGetValue(QuantityKey, out quantityResult))
                {
                    model.DateReceived = DateTime.Parse(dateReceivedResult.ToString());
                    model.Unit         = (ShipmentQuantityUnits)unitResult;
                    model.Quantity     = decimal.Parse(quantityResult.ToString());
                }
            }

            if (model.Certificate == CertificateType.Recovery || model.Certificate == CertificateType.ReceiptRecovery)
            {
                model.DateRecovered = DateTime.Parse(TempData[DateRecoveredKey].ToString());
            }
            return(View(model));
        }
        public async Task <ActionResult> UploadCertificate(Guid notificationId, Guid movementId, UploadCertificateViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            model.MovementId = movementId;
            if (model.Certificate == CertificateType.Receipt)
            {
                await SaveReceiptData(notificationId, model);
            }
            else if (model.Certificate == CertificateType.Recovery)
            {
                await SaveCompleteData(notificationId, model);
            }
            else if (model.Certificate == CertificateType.ReceiptRecovery)
            {
                await SaveReceiptRecoveryData(notificationId, model);
            }
            TempData[CertificateKey]      = model.Certificate;
            TempData[NotificationTypeKey] = model.NotificationType;

            return(RedirectToAction("Success", new { movementId }));
        }