Beispiel #1
0
        public async Task <IActionResult> ClearanceVBPost([FromBody] ClearenceFormDto form)
        {
            try
            {
                ValidateUser();
                int result = await Service.ClearanceVBPost(form);

                return(Ok(result));
            }
            catch (Exception e)
            {
                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message)
                    .Fail();
                return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result));
            }
        }
        public async Task <int> ClearanceVBPost(ClearenceFormDto form)
        {
            var vbRequestIds     = form.ListIds.Select(element => element.VBRequestId).ToList();
            var vbRealizationIds = form.ListIds.Select(element => element.VBRealizationId).ToList();

            var postedVB = new List <int>();

            foreach (var id in vbRequestIds)
            {
                if (id > 0)
                {
                    var model = await ReadByIdAsync(id);

                    model.SetIsCompleted(true, _IdentityService.Username, _UserAgent);
                    model.SetCompletedDate(DateTimeOffset.UtcNow, _IdentityService.Username, _UserAgent);
                    model.SetCompletedBy(_IdentityService.Username, _IdentityService.Username, _UserAgent);

                    UpdateAsync(id, model);

                    //if (model.Type == VBType.WithPO)
                    //{
                    //    var epoIds = _DbContext.VBRequestDocumentEPODetails.Where(entity => entity.VBRequestDocumentId == id).Select(entity => (long)entity.EPOId).ToList();
                    //    var autoJournalEPOUri = "vb-request-po-external/auto-journal-epo";

                    //    var body = new VBAutoJournalFormDto()
                    //    {
                    //        Date = DateTimeOffset.UtcNow,
                    //        DocumentNo = model.DocumentNo,
                    //        EPOIds = epoIds
                    //    };
                    //    postedVB.Add(model.Id);

                    //    var httpClient = _serviceProvider.GetService<IHttpClientService>();
                    //    var response = httpClient.PostAsync($"{APIEndpoint.Purchasing}{autoJournalEPOUri}", new StringContent(JsonConvert.SerializeObject(body).ToString(), Encoding.UTF8, General.JsonMediaType)).Result;
                    //}
                }
            }

            var vbNonPOIdsToBeAccounted = new List <int>();

            foreach (var id in vbRealizationIds)
            {
                if (id > 0)
                {
                    var model = _DbContext.VBRealizationDocuments.FirstOrDefault(entity => entity.Id == id);
                    model.SetIsCompleted(DateTimeOffset.UtcNow, _IdentityService.Username, _UserAgent);
                    _DbContext.VBRealizationDocuments.Update(model);

                    if (model.Type == VBType.NonPO)
                    {
                        vbNonPOIdsToBeAccounted.Add(model.Id);
                    }

                    if (model.Type == VBType.WithPO)
                    {
                        var epoIds = _DbContext.VBRealizationDocumentExpenditureItems.Where(entity => entity.VBRealizationDocumentId == model.Id).Select(entity => (long)entity.UnitPaymentOrderId).ToList();
                        var upoIds = _DbContext.VBRealizationDocumentExpenditureItems.Where(entity => entity.VBRealizationDocumentId == model.Id).Select(entity => new UPOAndAmountDto()
                        {
                            UPOId = entity.UnitPaymentOrderId, Amount = (double)entity.Amount
                        }).ToList();
                        if (epoIds.Count > 0)
                        {
                            var autoJournalEPOUri = "vb-request-po-external/auto-journal-epo";

                            var body = new VBAutoJournalFormDtoOld()
                            {
                                Date       = DateTimeOffset.UtcNow,
                                DocumentNo = model.DocumentNo,
                                EPOIds     = epoIds,
                                UPOIds     = upoIds
                            };

                            var httpClient = _serviceProvider.GetService <IHttpClientService>();
                            var response   = httpClient.PostAsync($"{APIEndpoint.Purchasing}{autoJournalEPOUri}", new StringContent(JsonConvert.SerializeObject(body).ToString(), Encoding.UTF8, General.JsonMediaType)).Result;
                        }
                    }

                    if (model.VBRequestDocumentId > 0 && !postedVB.Contains(model.VBRequestDocumentId))
                    {
                        var vbRequest = _DbContext.VBRequestDocuments.FirstOrDefault(entity => entity.Id == model.VBRequestDocumentId);

                        //if (vbRequest.Type == VBType.WithPO)
                        //{
                        //    var epoIds = _DbContext.VBRequestDocumentEPODetails.Where(entity => entity.VBRequestDocumentId == vbRequest.Id).Select(entity => (long)entity.EPOId).ToList();
                        //    if (epoIds.Count > 0)
                        //    {
                        //        var autoJournalEPOUri = "vb-request-po-external/auto-journal-epo";

                        //        var body = new VBAutoJournalFormDto()
                        //        {
                        //            Date = DateTimeOffset.UtcNow,
                        //            DocumentNo = model.DocumentNo,
                        //            EPOIds = epoIds
                        //        };

                        //        var httpClient = _serviceProvider.GetService<IHttpClientService>();
                        //        var response = httpClient.PostAsync($"{APIEndpoint.Purchasing}{autoJournalEPOUri}", new StringContent(JsonConvert.SerializeObject(body).ToString(), Encoding.UTF8, General.JsonMediaType)).Result;
                        //    }
                        //}
                    }
                }
            }

            var result = await _DbContext.SaveChangesAsync();

            if (vbNonPOIdsToBeAccounted.Count > 0)
            {
                await _autoJournalService.AutoJournalVBNonPOClearence(vbNonPOIdsToBeAccounted, form.Bank);
            }

            await _autoDailyBankTransactionService.AutoCreateFromClearenceVB(vbRealizationIds, form.Bank);

            return(result);
        }