Ejemplo n.º 1
0
            private static PurchaseOrderResponse GetPurchaseOrderResponseMessage(Cost cost)
            {
                var message = new PurchaseOrderResponse
                {
                    ActivityType   = "updated",
                    CostNumber     = cost.CostNumber,
                    ClientName     = "Pg",
                    EventTimeStamp = DateTime.Now,
                    Payload        = JObject.Parse($@"{{
    ""requisition"": ""135244"",
    ""poNumber"": ""8000103223"",
    ""approverEmail"": ""*****@*****.**"",
    ""ioNumberOwner"": ""*****@*****.**"",
    ""grNumber"": null,
    ""glAccount"": ""0033500001"",
    ""poDate"": ""2017-10-30T11:11:21+00:00"",
    ""grDate"": null,
    ""accountCode"": ""823-4776-KR-G4P~F1--004001597408-S821018AT-0033500001"",
    ""comments"": ""Management hierarchy approver. The approver is the manager of Esteban Sanchez with an approval limit of 100000.00 USD for requisition"",
    ""type"": null,
    ""itemIdCode"": ""199150"",
    ""approvalStatus"": ""approved"",
    ""totalAmount"": null
  }}")
                };

                return(message);
            }
        public async Task Consume_Always_Should_SavePurchaseOrderResponse_AndUpdatePaymentDetails()
        {
            // Arrange
            var activityType = ActivityTypes.Updated;

            var purchaseOrderResponse = new PurchaseOrderResponse
            {
                ActivityType = activityType,
                CostNumber   = CostNumber,
                ClientName   = BuType.Pg.ToString(),
                Payload      = JObject.Parse(JsonConvert.SerializeObject(new PgPurchaseOrderResponse()))
            };
            var operationResponse = new ApprovalServiceActionResult
            {
                Success = true
            };

            _approvalServiceMock.Setup(a => a.Approve(It.IsAny <Guid>(), It.IsAny <UserIdentity>(), BuType.Pg, SourceSystem.Coupa)).Returns(Task.FromResult(operationResponse));
            _emailNotificationServiceMock.Setup(em => em.CostHasBeenApproved(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <string>())).Returns(Task.FromResult(true));

            // Act
            await _consumer.Consume(purchaseOrderResponse);

            // Assert
            _customDataServiceMock.Verify(ds => ds.Save(It.IsAny <Guid>(), It.Is <string>(s => s == CustomObjectDataKeys.PgPurchaseOrderResponse), It.IsAny <object>(), It.IsAny <UserIdentity>()));
            _customDataServiceMock.Verify(ds => ds.Save(It.IsAny <Guid>(), It.Is <string>(s => s == CustomObjectDataKeys.PgPaymentDetails), It.IsAny <object>(), It.IsAny <UserIdentity>()));
        }
Ejemplo n.º 3
0
        public ActionResult CreateOrEditPurchaseOrder()
        {
            PurchaseOrderResponse _response = new PurchaseOrderResponse();

            if (Request.QueryString["id"] != null)
            {
                var request = new PurchaseOrderRequest
                {
                    Data = new PurchaseOrderModel
                    {
                        Id = long.Parse(Request.QueryString["id"].ToString())
                    }
                };

                PurchaseOrderResponse resp   = new PurchaseOrderHandler(_unitOfWork).GetDetail(request);
                PurchaseOrderModel    _model = resp.Entity;
                ViewBag.Response = _response;
                return(View(_model));
            }
            else
            {
                ViewBag.Response   = _response;
                ViewBag.ActionType = ClinicEnums.Action.Add;
                return(View());
            }
        }
Ejemplo n.º 4
0
        public JsonResult searchpurchaseorder(string prefix)
        {
            var _draw          = "1";
            var _start         = "0";
            var _length        = "10";
            var _sortColumn    = "Id";
            var _sortColumnDir = "asc";
            var _searchValue   = prefix;

            int _pageSize = _length != null?Convert.ToInt32(_length) : 0;

            int _skip = _start != null?Convert.ToInt32(_start) : 0;

            var request = new PurchaseOrderRequest
            {
                Draw          = _draw,
                SearchValue   = _searchValue,
                SortColumn    = _sortColumn,
                SortColumnDir = _sortColumnDir,
                PageSize      = _pageSize,
                Skip          = _skip
            };
            var response = new PurchaseOrderResponse();

            if (request.SearchValue != null)
            {
                response = new PurchaseOrderHandler(_unitOfWork).GetListData(request);
            }

            return(Json(new { data = response.Data, recordsFiltered = response.RecordsFiltered, recordsTotal = response.RecordsTotal, draw = response.Draw }, JsonRequestBehavior.AllowGet));
        }
        public async Task Consume_Send_Comments_To_ApprovalService(string comments)
        {
            // Arrange
            const string activityType   = ActivityTypes.Updated;
            const string approvalStatus = ApprovalStatuses.Rejected;

            var purchaseOrderResponse = new PurchaseOrderResponse
            {
                ActivityType = activityType,
                CostNumber   = CostNumber,
                ClientName   = BuType.Pg.ToString(),
                Payload      = JObject.Parse(JsonConvert.SerializeObject(new PgPurchaseOrderResponse
                {
                    Comments       = comments,
                    ApprovalStatus = approvalStatus
                }))
            };
            var operationResponse = new ApprovalServiceActionResult
            {
                Success = true
            };

            _approvalServiceMock.Setup(a => a.Reject(It.IsAny <Guid>(), It.IsAny <UserIdentity>(), BuType.Pg, comments, It.IsAny <SourceSystem>())).Returns(Task.FromResult(operationResponse));
            _emailNotificationServiceMock.Setup(em => em.CostHasBeenRejected(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <string>(), string.Empty)).Returns(Task.FromResult(true));

            // Act
            await _consumer.Consume(purchaseOrderResponse);

            //Assert
            _approvalServiceMock.Verify(s => s.Reject(It.IsAny <Guid>(), It.IsAny <UserIdentity>(), BuType.Pg, comments, It.IsAny <SourceSystem>()));
            _emailNotificationServiceMock.Verify(s => s.CostHasBeenRejected(It.IsAny <Guid>(), It.IsAny <Guid>(), ApprovalType.Brand.ToString(), comments));
        }
Ejemplo n.º 6
0
        private async Task ActionOnCost(PurchaseOrderResponse message, PgPurchaseOrderResponse payload, Cost cost, SystemAdminUserIdentity adminUser)
        {
            var adminUserId = adminUser.Id;

            OperationResponse response;

            switch (message.ActivityType)
            {
            case ActivityTypes.Updated:
                switch (payload.ApprovalStatus)
                {
                case ApprovalStatuses.Approved:
                    if (ApprovalRequired(cost))
                    {
                        await ApproveCost(cost.Id, adminUser);
                    }
                    break;

                case ApprovalStatuses.Rejected:
                    message.Payload.TryGetValue(nameof(PgPurchaseOrderResponse.Comments), StringComparison.OrdinalIgnoreCase, out var commentsToken);
                    var comments = commentsToken != null?commentsToken.ToObject <string>() : string.Empty;

                    response = await _approvalService.Reject(cost.Id, adminUser, BuType.Pg, comments, SourceSystem.Coupa);

                    if (response.Success)
                    {
                        await _emailNotificationService.CostHasBeenRejected(cost.Id, adminUserId, ApprovalType.Brand.ToString(), comments);
                    }

                    break;

                // ADC-1731 Dealing with COUPA's limitations
                case ApprovalStatuses.AwaitingDecisionInCost:
                    if (ApprovalRequired(cost) && await HasCostBeenApproved(cost, payload))
                    {
                        await ApproveCost(cost.Id, adminUser);
                    }
                    break;
                }
                break;

            case ActivityTypes.Cancelled:
                response = await _costActionService.CompleteCancel(cost.Id, BuType.Pg);

                if (response.Success)
                {
                    await _emailNotificationService.CostHasBeenCancelled(cost.Id);
                }

                break;

            case ActivityTypes.Recalled:
                await _costActionService.CompleteRecall(cost.Id, adminUser);

                break;
            }
        }
Ejemplo n.º 7
0
        public void Create(PurchaseOrderResponse _response)
        {
            var searchPredicate = PredicateBuilder.New <Data.DataRepository.DeliveryOrder>(true);

            _response.Entity.approve   = null;
            _response.Entity.approveby = null;

            var request = new DeliveryOrderRequest
            {
                Data = Mapper.Map <PurchaseOrderModel, DeliveryOrderModel>(_response.Entity)
            };

            request.Data.dodate = DateTime.Now;
            request.Data.poid   = Convert.ToInt32(_response.Entity.Id);
            request.Data.Id     = 0;

            var      lastponumber = _unitOfWork.DeliveryOrderRepository.Get(searchPredicate, orderBy: a => a.OrderByDescending(x => x.CreatedDate)).Select(a => a.donumber).FirstOrDefault();
            DateTime?getmonth     = _unitOfWork.DeliveryOrderRepository.Get(searchPredicate, orderBy: a => a.OrderByDescending(x => x.CreatedDate)).Select(a => a.dodate).FirstOrDefault();
            DateTime?month        = getmonth != null ? getmonth : DateTime.Now;
            string   ponumber     = lastponumber != null?GeneralHandler.stringincrement(lastponumber, Convert.ToDateTime(month)) : "00001";

            request.Data.donumber = "DO" + _response.Entity.Account.Organization + DateTime.Now.Year + DateTime.Now.Month + ponumber;
            request.Data.Account  = _response.Entity.Account;

            DeliveryOrderResponse deliveryorderresponse = new DeliveryOrderResponse();

            new DeliveryOrderValidator(_unitOfWork).Validate(request, out deliveryorderresponse);

            if (_response.Entity.PurchaseOrderDetails != null)
            {
                int i = 0;
                foreach (var item in _response.Entity.PurchaseOrderDetails)
                {
                    var deliveryorderdetailrequest = new DeliveryOrderDetailRequest
                    {
                        Data = Mapper.Map <PurchaseOrderDetailModel, DeliveryOrderDetailModel>(item)
                    };
                    deliveryorderdetailrequest.Data.DeliveryOderId = Convert.ToInt32(deliveryorderresponse.Entity.Id);
                    deliveryorderdetailrequest.Data.Account        = _response.Entity.Account;
                    deliveryorderdetailrequest.Data.Id             = 0;
                    //
                    var requestnamabarang = new ProductRequest
                    {
                        Data = new ProductModel
                        {
                            Id = Convert.ToInt32(item.ProductId)
                        }
                    };

                    ProductResponse namabarang = new ProductHandler(_unitOfWork).GetDetail(requestnamabarang);
                    deliveryorderdetailrequest.Data.namabarang = namabarang.Entity.Name;
                    DeliveryOrderDetailResponse _deliveryorderdetailresponse = new DeliveryOrderDetailResponse();
                    new DeliveryOrderDetailValidator(_unitOfWork).Validate(deliveryorderdetailrequest, out _deliveryorderdetailresponse);
                    i++;
                }
            }
        }
Ejemplo n.º 8
0
        public void OneTimeSetUp()
        {

            var bpService = appHost.Container.Resolve<BusinessPartnerService>();
            starbucksBPResponse = bpService.Post(starbucksBP);

            var poService = appHost.Container.Resolve<PurchaseOrderService>();
            coffeePO.CustomerId = starbucksBPResponse.Id;
            coffeePOResponse = poService.Post(coffeePO);
        }
Ejemplo n.º 9
0
        public void Validate(PurchaseOrderRequest request, out PurchaseOrderResponse response)
        {
            response = new PurchaseOrderResponse();

            if ((request.Action != null && request.Action.Equals(ClinicEnums.Action.DELETE.ToString())) || (request.Action != null && request.Action.Equals(ClinicEnums.Action.APPROVE.ToString())) || (request.Action != null && request.Action.Equals(ClinicEnums.Action.VALIDASI.ToString())))
            {
                if (request.Action != null && request.Action.Equals(ClinicEnums.Action.DELETE.ToString()))
                {
                    ValidateForDelete(request, out response);
                }
                else if (request.Action.Equals(ClinicEnums.Action.APPROVE.ToString()))
                {
                    ValidateForApprove(request, out response);
                }
                else
                {
                    ValidateForValidasi(request, out response);
                }
            }
            else
            {
                bool isHavePrivilege = true;

                if (request.Data.ponumber == null || String.IsNullOrWhiteSpace(request.Data.ponumber))
                {
                    errorFields.Add("Ponumber");
                }

                if (errorFields.Any())
                {
                    response.Status  = false;
                    response.Message = string.Format(Messages.ValidationErrorFields, String.Join(",", errorFields));
                }

                if (request.Data.Id == 0)
                {
                    isHavePrivilege = IsHaveAuthorization(ADD_M_PURCHASEORDER, request.Data.Account.Privileges.PrivilegeIDs);
                }
                else
                {
                    isHavePrivilege = IsHaveAuthorization(EDIT_M_PURCHASEORDER, request.Data.Account.Privileges.PrivilegeIDs);
                }

                if (!isHavePrivilege)
                {
                    response.Status  = false;
                    response.Message = Messages.UnauthorizedAccess;
                }

                if (response.Status)
                {
                    response = new PurchaseOrderHandler(_unitOfWork).CreateOrEdit(request);
                }
            }
        }
 private void SendToQueue(PurchaseOrderResponse response)
 {
     if (response?.Message == null)
     {
         return;
     }
     foreach (var item in response.Message)
     {
         this.Queue.Enqueue(item);
     }
 }
        public async Task Consume_whenUpdatedAndStatusApprovedAndPendingApproval_shouldApproveTheCost()
        {
            // Arrange
            var activityType   = ActivityTypes.Updated;
            var approvalStatus = ApprovalStatuses.Approved;
            var requisition    = "requisitionId";

            var purchaseOrderResponse = new PurchaseOrderResponse
            {
                ActivityType = activityType,
                CostNumber   = CostNumber,
                ClientName   = BuType.Pg.ToString(),
                Payload      = JObject.Parse(JsonConvert.SerializeObject(new PgPurchaseOrderResponse
                {
                    ApprovalStatus = approvalStatus
                }))
            };
            var operationResponse = new ApprovalServiceActionResult
            {
                Success = true
            };
            var dbPurchaseOrderResponse = new PgPurchaseOrderResponse()
            {
                Requisition = requisition,
            };
            var dbPaymentDetails = new PgPaymentDetails()
            {
                Requisition = requisition,
            };

            var cost = _efContext.Cost.Find(_costId);

            cost.Status = CostStageRevisionStatus.PendingBrandApproval;
            _efContext.Cost.Update(cost);
            await _efContext.SaveChangesAsync();

            _customDataServiceMock.Setup(cds => cds.GetCustomData <PgPurchaseOrderResponse>(It.IsAny <Guid>(), It.IsAny <string>())).Returns(Task.FromResult(dbPurchaseOrderResponse));
            _customDataServiceMock.Setup(cds => cds.GetCustomData <PgPaymentDetails>(It.IsAny <Guid>(), It.IsAny <string>())).Returns(Task.FromResult(dbPaymentDetails));
            _customDataServiceMock.Setup(cds => cds.Save(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <object>(), It.IsAny <UserIdentity>())).Returns(Task.FromResult(new CustomObjectData()));
            _approvalServiceMock.Setup(a => a.Approve(It.IsAny <Guid>(), It.IsAny <UserIdentity>(), BuType.Pg, SourceSystem.Coupa)).Returns(Task.FromResult(operationResponse));
            _emailNotificationServiceMock.Setup(em => em.CostHasBeenApproved(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <string>())).Returns(Task.FromResult(true));

            // Act
            await _consumer.Consume(purchaseOrderResponse);

            // Assert
            _approvalServiceMock.Verify(s => s.Approve(It.IsAny <Guid>(), It.IsAny <UserIdentity>(), BuType.Pg, SourceSystem.Coupa), Times.Once);
            _emailNotificationServiceMock.Verify(em => em.CostHasBeenApproved(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <string>()), Times.Once);

            Assert.AreEqual(requisition, dbPurchaseOrderResponse.Requisition);
            Assert.AreEqual(requisition, dbPaymentDetails.Requisition);
        }
        public async Task Consume_whenUpdatedAndStatusRejected_shouldRejectTheCost()
        {
            // Arrange
            var activityType   = ActivityTypes.Updated;
            var approvalStatus = ApprovalStatuses.Rejected;

            var purchaseOrderResponse = new PurchaseOrderResponse
            {
                ActivityType = activityType,
                CostNumber   = CostNumber,
                ClientName   = BuType.Pg.ToString(),
                Payload      = JObject.Parse(JsonConvert.SerializeObject(new PgPurchaseOrderResponse
                {
                    ApprovalStatus = approvalStatus
                }))
            };
            var operationResponse = new ApprovalServiceActionResult()
            {
                Success = true
            };
            var dbPurchaseOrderResponse = new PgPurchaseOrderResponse()
            {
                Requisition = "requisitionId",
            };
            var dbPaymentDetails = new PgPaymentDetails()
            {
                Requisition = "requisitionId",
            };

            _customDataServiceMock.Setup(cds => cds.GetCustomData <PgPurchaseOrderResponse>(It.IsAny <Guid>(), It.IsAny <string>())).Returns(Task.FromResult(dbPurchaseOrderResponse));
            _customDataServiceMock.Setup(cds => cds.GetCustomData <PgPaymentDetails>(It.IsAny <Guid>(), It.IsAny <string>())).Returns(Task.FromResult(dbPaymentDetails));
            _customDataServiceMock.Setup(cds => cds.Save(It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <object>(), It.IsAny <UserIdentity>())).Returns(Task.FromResult(new CustomObjectData()));
            _approvalServiceMock.Setup(a => a.Reject(It.IsAny <Guid>(), It.IsAny <UserIdentity>(), BuType.Pg, It.IsAny <string>(), It.IsAny <SourceSystem>())).Returns(Task.FromResult(operationResponse));
            _emailNotificationServiceMock.Setup(em => em.CostHasBeenRejected(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>())).Returns(Task.FromResult(true));

            // Act
            await _consumer.Consume(purchaseOrderResponse);

            // Assert
            _approvalServiceMock.Verify(s => s.Reject(It.IsAny <Guid>(), It.IsAny <UserIdentity>(), BuType.Pg, It.IsAny <string>(), It.IsAny <SourceSystem>()), Times.Once);
            _emailNotificationServiceMock.Verify(em => em.CostHasBeenRejected(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>()), Times.Once);
            _customDataServiceMock.Verify(cds => cds.GetCustomData <PgPurchaseOrderResponse>(It.IsAny <Guid>(), It.IsAny <string>()), Times.Once);
            _customDataServiceMock.Verify(cds => cds.GetCustomData <PgPaymentDetails>(It.IsAny <Guid>(), It.IsAny <string>()), Times.Once);

            Assert.IsNull(dbPurchaseOrderResponse.Requisition);
            Assert.IsNull(dbPaymentDetails.Requisition);
        }
Ejemplo n.º 13
0
        public JsonResult ApprovePurchaseOrder(int id)
        {
            PurchaseOrderResponse _response = new PurchaseOrderResponse();
            var request = new PurchaseOrderRequest
            {
                Data = new PurchaseOrderModel
                {
                    Id      = id,
                    Account = Session["UserLogon"] == null ? new AccountModel() : (AccountModel)Session["UserLogon"]
                },
                Action = ClinicEnums.Action.APPROVE.ToString()
            };

            new PurchaseOrderValidator(_unitOfWork).Validate(request, out _response);

            return(Json(new { Status = _response.Status, Message = _response.Message }, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 14
0
        public JsonResult CreateOrEditPurchaseOrder(PurchaseOrderModel _purchaseorder, List <PurchaseOrderDetailModel> purchaseOrderDetailModels)
        {
            if (Session["UserLogon"] != null)
            {
                _purchaseorder.Account = (AccountModel)Session["UserLogon"];
            }
            _purchaseorder.Id = Convert.ToInt32(_purchaseorder.Id) > 0 ? _purchaseorder.Id : 0;
            var request = new PurchaseOrderRequest
            {
                Data = _purchaseorder
            };

            PurchaseOrderResponse _response = new PurchaseOrderResponse();

            new PurchaseOrderValidator(_unitOfWork).Validate(request, out _response);
            if (purchaseOrderDetailModels != null)
            {
                int i = 0;
                foreach (var item in purchaseOrderDetailModels)
                {
                    item.OrderNumber = i + 1;
                    var purchaseorderdetailrequest = new PurchaseOrderDetailRequest
                    {
                        Data = item
                    };
                    purchaseorderdetailrequest.Data.PurchaseOrderId = Convert.ToInt32(_response.Entity.Id);
                    purchaseorderdetailrequest.Data.Account         = (AccountModel)Session["UserLogon"];
                    //
                    var requestnamabarang = new ProductRequest
                    {
                        Data = new ProductModel
                        {
                            Id = item.ProductId
                        }
                    };

                    ProductResponse namabarang = new ProductHandler(_unitOfWork).GetDetail(requestnamabarang);
                    purchaseorderdetailrequest.Data.namabarang = namabarang.Entity.Name;
                    PurchaseOrderDetailResponse _purchaseorderdetailresponse = new PurchaseOrderDetailResponse();
                    new PurchaseOrderDetailValidator(_unitOfWork).Validate(purchaseorderdetailrequest, out _purchaseorderdetailresponse);
                    i++;
                }
            }
            return(Json(new { data = _response.Data }, JsonRequestBehavior.AllowGet));
        }
        public async Task Consume_whenUpdated_And_StatusAwaitingDecisionInCost_And_TotalAmountTheSameAsCurrent_And_CostStatusIsPendingBrandApproval_shouldApproveTheCost()
        {
            // Arrange
            var           activityType        = ActivityTypes.Updated;
            var           approvalStatus      = ApprovalStatuses.AwaitingDecisionInCost;
            const decimal totalAmountIncoming = (decimal)10000.23;  // 2 Digits precision defined on schema level
            const decimal totalAmountCurrent  = (decimal)10000.226; // Rounded to 2 digits amount is still the same as totalAmountIncoming
            //_cost.Status = CostStageRevisionStatus.PendingBrandApproval;
            var cost = _efContext.Cost.Find(_costId);

            cost.Status = CostStageRevisionStatus.PendingBrandApproval;
            _efContext.Cost.Update(cost);
            await _efContext.SaveChangesAsync();

            var purchaseOrderResponse = new PurchaseOrderResponse
            {
                ActivityType = activityType,
                CostNumber   = CostNumber,
                ClientName   = BuType.Pg.ToString(),
                Payload      = JObject.Parse(JsonConvert.SerializeObject(new PgPurchaseOrderResponse
                {
                    ApprovalStatus = approvalStatus,
                    TotalAmount    = totalAmountIncoming
                }))
            };
            var operationResponse = new ApprovalServiceActionResult
            {
                Success = true
            };

            _approvalServiceMock.Setup(a => a.Approve(It.IsAny <Guid>(), It.IsAny <UserIdentity>(), BuType.Pg, SourceSystem.Coupa)).ReturnsAsync(operationResponse);
            _emailNotificationServiceMock.Setup(em => em.CostHasBeenRejected(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>())).Returns(Task.FromResult(true));
            _pgPaymentServiceMock.Setup(p => p.GetPaymentAmount(It.Is <Guid>(id => id == _cost.LatestCostStageRevisionId.Value), false))
            .ReturnsAsync(new PaymentAmountResult
            {
                TotalCostAmount = totalAmountCurrent
            });

            // Act
            await _consumer.Consume(purchaseOrderResponse);

            // Assert
            _approvalServiceMock.Verify(s => s.Approve(It.IsAny <Guid>(), It.IsAny <UserIdentity>(), BuType.Pg, SourceSystem.Coupa), Times.Once);
            _emailNotificationServiceMock.Verify(em => em.CostHasBeenApproved(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <string>()), Times.Once);
        }
Ejemplo n.º 16
0
        public async Task Consume(PurchaseOrderResponse message)
        {
            var cost = await _efContext.Cost
                       .AsNoTracking()
                       .FirstOrDefaultAsync(c => c.CostNumber == message.CostNumber);

            if (cost == null)
            {
                throw new XmgException($"Could't find the cost with Cost Number {message.CostNumber}")
                      {
                          ClientName = message.ClientName
                      };
            }

            try
            {
                var payload = JsonConvert.DeserializeObject <PgPurchaseOrderResponse>(message.Payload.ToString());

                var adminUser = await _efContext.CostUser.FirstOrDefaultAsync(u => u.Email == ApprovalMemberModel.BrandApprovalUserEmail);

                var adminUserIdentity = new SystemAdminUserIdentity(adminUser);
                await _efContext.InTransactionAsync(async() =>
                {
                    await SaveResponse(payload, cost, adminUserIdentity);

                    await ActionOnCost(message, payload, cost, adminUserIdentity);

                    if (payload.ApprovalStatus == ApprovalStatuses.Approved ||
                        // ADC-1731
                        (payload.ApprovalStatus == ApprovalStatuses.AwaitingDecisionInCost &&
                         ApprovalRequired(cost) && await HasCostBeenApproved(cost, payload)))
                    {
                        // payload details are required in the email so the response needs to be saved before we can send the email
                        await _emailNotificationService.CostHasBeenApproved(cost.Id, adminUserIdentity.Id, ApprovalType.Brand.ToString());
                    }
                },
                                                    () => _eventService.SendAllPendingAsync());
            }
            catch (Exception ex)
            {
                var messageJson = JsonConvert.SerializeObject(message);
                throw new XmgException($"Failed to consume response message: {messageJson} from Coupa {ex}", ex);
            }
        }
Ejemplo n.º 17
0
        private void ValidateForDelete(PurchaseOrderRequest request, out PurchaseOrderResponse response)
        {
            response = new PurchaseOrderResponse();

            if (request.Action == ClinicEnums.Action.DELETE.ToString())
            {
                bool isHavePrivilege = IsHaveAuthorization(DELETE_M_PURCHASEORDER, request.Data.Account.Privileges.PrivilegeIDs);
                if (!isHavePrivilege)
                {
                    response.Status  = false;
                    response.Message = Messages.UnauthorizedAccess;
                }
            }

            if (response.Status)
            {
                response = new PurchaseOrderHandler(_unitOfWork).RemoveData(request);
            }
        }
Ejemplo n.º 18
0
        public async Task Handle_always_ShouldCallConsumer()
        {
            // Arrange
            var activityType = ActivityTypes.Updated;

            var costNumber            = "test cost number";
            var purchaseOrderResponse = new PurchaseOrderResponse
            {
                ActivityType = activityType,
                CostNumber   = costNumber,
                ClientName   = BuType.Pg.ToString()
            };

            // Act
            await _handler.Handle(purchaseOrderResponse);

            // Assert
            _consumerMock.Verify(c => c.Consume(purchaseOrderResponse), Times.Once);
        }
Ejemplo n.º 19
0
        public async Task Handle_whenException_ShouldSendEmailToSupport()
        {
            // Arrange
            var activityType = ActivityTypes.Updated;

            var costNumber            = "test cost number";
            var purchaseOrderResponse = new PurchaseOrderResponse
            {
                ActivityType = activityType,
                CostNumber   = costNumber,
                ClientName   = "Invalid"
            };

            // Act
            await _handler.Handle(purchaseOrderResponse);

            // Assert
            _supportNotificationServiceMock.Verify(b =>
                                                   b.SendSupportErrorNotification(costNumber, It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }
Ejemplo n.º 20
0
        public PurchaseOrderResponse GetPurchaseOrder(string externalId)
        {
            //ManagePurchaseOrderInReadRequest request = new ManagePurchaseOrderInReadRequest();

            PurchaseOrderByIDQueryMessage_sync query = new PurchaseOrderByIDQueryMessage_sync();

            query.PurchaseOrder             = new PurchaseOrderByIDQuery();
            query.PurchaseOrder.ID          = new BusinessTransactionDocumentID[1];
            query.PurchaseOrder.ID[0]       = new BusinessTransactionDocumentID();
            query.PurchaseOrder.ID[0].Value = externalId;

            //request.PurchaseOrderByIDQuery_sync = query;

            var sapResponse = _manageClient.ManagePurchaseOrderInRead(query);

            PurchaseOrderResponse response = new PurchaseOrderResponse();

            response.ExternalId = sapResponse.PurchaseOrder[0].ID.Value;

            return(response);
        }
Ejemplo n.º 21
0
        public void Handle_whenException_ShouldSendEmailToSupportAndRethrowException()
        {
            // Arrange
            var activityType = ActivityTypes.Updated;

            var costNumber            = "test cost number";
            var purchaseOrderResponse = new PurchaseOrderResponse
            {
                ActivityType = activityType,
                CostNumber   = costNumber,
                ClientName   = BuType.Pg.ToString()
            };

            _consumerMock.Setup(c => c.Consume(It.IsAny <PurchaseOrderResponse>())).Throws <Exception>();

            // Act/Assert
            _handler.Awaiting(h => h.Handle(purchaseOrderResponse)).ShouldThrow <Exception>();

            _supportNotificationServiceMock.Verify(b =>
                                                   b.SendSupportErrorNotification(costNumber, It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }
        private async Task Reject(PurchaseOrderResponse message, PurchaseOrderErrorMessage errorMessage)
        {
            var adminUser = await _efContext.CostUser.FirstOrDefaultAsync(u => u.Email == ApprovalMemberModel.BrandApprovalUserEmail);

            var adminUserIdentity = new SystemAdminUserIdentity(adminUser);
            var cost = await _efContext.Cost.SingleAsync(c => c.CostNumber == message.CostNumber);

            var result = await _approvalService.Reject(cost.Id, adminUserIdentity, GetBuType(message.ClientName), errorMessage.Message, SourceSystem.Coupa);

            if (!result.Success)
            {
                await OnTechnicalError(message.CostNumber, $"Failed to reject cost due to error! {result.Messages}");
            }
            else
            {
                var error = $"Cost {message.CostNumber} rejected due to : {errorMessage.Type.GetStringValue()} {errorMessage.Message}";
                _logger.Information(error);

                await _emailNotificationService.CostHasBeenRejected(
                    cost.Id, adminUser.Id, ApprovalType.Brand.ToString(), error);
            }
        }
Ejemplo n.º 23
0
        public PurchaseOrderResponse ParseSapManageResponse(PurchaseOrderMaintainConfirmationBundleMessage_sync sapResponse, List <PurchaseOrderLine> lines)
        {
            PurchaseOrderResponse response = new PurchaseOrderResponse();
            BaseResponse          tempRes  = SapLogParser.ParseSapResponseLog(sapResponse.Log);

            response.Errors   = tempRes.Errors;
            response.Warnings = tempRes.Warnings;

            if (sapResponse.PurchaseOrder != null)
            {
                response.ExternalId = sapResponse.PurchaseOrder[0].BusinessTransactionDocumentID.Value;
            }

            response.Items = new List <PairedIdsResponse>();
            foreach (var line in lines)
            {
                response.Items.Add(new PairedIdsResponse {
                    LocalId = line.ItemDetails.Id, ExternalId = line.ItemDetails.ExternalId
                });
            }

            return(response);
        }
Ejemplo n.º 24
0
        public ActionResult PrintPurchaseOrder(int id)
        {
            PurchaseOrderResponse _response = new PurchaseOrderResponse();

            var request = new PurchaseOrderRequest
            {
                Data = new PurchaseOrderModel
                {
                    Id = id
                }
            };

            PurchaseOrderResponse resp   = new PurchaseOrderHandler(_unitOfWork).GetDetail(request);
            PurchaseOrderModel    _model = resp.Entity;

            ViewBag.Response = _response;
            return(new PartialViewAsPdf(_model)
            {
                PageOrientation = Orientation.Portrait,
                PageSize = Size.Folio,

                FileName = "PurchaseOrder" + _model.ponumber + ".pdf"
            });
        }
Ejemplo n.º 25
0
        public PurchaseOrderResponse SetPurchaseOrder(PurchaseOrderRequest purchaseOrder)
        {
            var request = new PurchaseOrderBundleMaintainRequestMessage_sync();

            request.PurchaseOrderMaintainBundle = new PurchaseOrderMaintainRequestBundle[1];
            var poRequest = new PurchaseOrderMaintainRequestBundle();

            poRequest.BusinessTransactionDocumentTypeCode       = new BusinessTransactionDocumentTypeCode();
            poRequest.BusinessTransactionDocumentTypeCode.Value = "001";

            poRequest.ItemListCompleteTransmissionIndicator          = true;
            poRequest.ItemListCompleteTransmissionIndicatorSpecified = true;

            poRequest.SellerParty = new PurchaseOrderMaintainRequestBundleParty();
            poRequest.SellerParty.ObjectNodePartyTechnicalID = "3";
            poRequest.SellerParty.PartyKey               = new PartyKey();
            poRequest.SellerParty.PartyKey.PartyID       = new PartyID();
            poRequest.SellerParty.PartyKey.PartyID.Value = purchaseOrder.AccountExternalId;

            poRequest.BillToParty = new PurchaseOrderMaintainRequestBundleParty();
            poRequest.BillToParty.ObjectNodePartyTechnicalID = "5";
            poRequest.BillToParty.PartyKey               = new PartyKey();
            poRequest.BillToParty.PartyKey.PartyID       = new PartyID();
            poRequest.BillToParty.PartyKey.PartyID.Value = purchaseOrder.OrganizationID;

            poRequest.BuyerParty = new PurchaseOrderMaintainRequestBundleParty();
            poRequest.BuyerParty.ObjectNodePartyTechnicalID = "2";
            poRequest.BuyerParty.PartyKey               = new PartyKey();
            poRequest.BuyerParty.PartyKey.PartyID       = new PartyID();
            poRequest.BuyerParty.PartyKey.PartyID.Value = purchaseOrder.OrganizationID;

            poRequest.EmployeeResponsibleParty                        = new PurchaseOrderMaintainRequestBundleParty();
            poRequest.EmployeeResponsibleParty.PartyKey               = new PartyKey();
            poRequest.EmployeeResponsibleParty.PartyKey.PartyID       = new PartyID();
            poRequest.EmployeeResponsibleParty.PartyKey.PartyID.Value =
                purchaseOrder.Ownership.LeadOwner.ExternalId;

            poRequest.DeliveryTerms           = new PurchaseOrderMaintainRequestBundleDeliveryTerms();
            poRequest.DeliveryTerms.IncoTerms = new Incoterms();
            poRequest.DeliveryTerms.IncoTerms.ClassificationCode = purchaseOrder.IncotermID;

            poRequest.CashDiscountTerms            = new PurchaseOrderMaintenanceCashDiscountTerms();
            poRequest.CashDiscountTerms.Code       = new CashDiscountTermsCode();
            poRequest.CashDiscountTerms.Code.Value = purchaseOrder.PaymentTermID;

            poRequest.CurrencyCode = purchaseOrder.CurrencyID;

            poRequest.Date = new DateTime();
            poRequest.Date = Convert.ToDateTime(purchaseOrder.OrderDate);

            if (purchaseOrder.ExternalId != null)
            {
                poRequest.PurchaseOrderID       = new BusinessTransactionDocumentID();
                poRequest.PurchaseOrderID.Value = purchaseOrder.ExternalId;
            }

            //lines
            if (purchaseOrder.Lines != null && purchaseOrder.Lines.Count > 0)
            {
                try
                {
                    poRequest.Item = SetPurchaseOrderLines(purchaseOrder.Lines, purchaseOrder.ToLocationExternalId);
                }
                catch (Exception ex)
                {
                    var error = new PurchaseOrderResponse();
                    error.Errors.Add(ex.Message);
                    return(error);
                }
            }

            request.PurchaseOrderMaintainBundle[0] = poRequest;

            var sapResponse       = _manageClient.ManagePurchaseOrderInMaintainBundle(request);
            var parsedSapResponse = ParseSapManageResponse(sapResponse, purchaseOrder.Lines);

            return(parsedSapResponse);
        }