Exemple #1
0
        private void SendResponse(Subtransaction subtransaction)
        {
            PrescribedDrug pd = new PrescribedDrug
            {
                Id            = subtransaction.Id,
                CoveredAmount = subtransaction.AmountPaid,
            };

            string json = JsonSerializer.Serialize(pd);

            var bytes = Encoding.UTF8.GetBytes(json);

#if DEBUG
            var request = (HttpWebRequest)WebRequest.Create("https://localhost:44381/api/PrescribedDrugsAPI");
#else
            var request = (HttpWebRequest)WebRequest.Create("https://wngcsp86.intra.uwlax.edu:8080/api/PrescribedDrugsAPI");
#endif

            request.Method        = "POST";
            request.ContentLength = bytes.Length;
            request.ContentType   = "application/json";
            Stream stream = request.GetRequestStream();
            stream.Write(bytes, 0, bytes.Length);
            stream.Close();

            WebResponse subtransactionResponse = request.GetResponse();
        }
Exemple #2
0
        private bool?isTransactionProcessed(PTransaction transaction, Subtransaction subtransaction = null)
        {
            List <Subtransaction> allSubtransactions = _transactionContext.Subtransactions.Where(s => s.PTransactionId == transaction.Id).ToList();
            bool anyProcessed = false;
            bool allProcessed = true;

            foreach (Subtransaction s in allSubtransactions)
            {
                if (subtransaction != null && s.Id == subtransaction.Id)
                {
                    continue;
                }
                if (s.Accepted != 0)
                {
                    anyProcessed = true;
                }
                else
                {
                    allProcessed = false;
                }
            }

            if (!anyProcessed)
            {
                return(false);
            }
            if (anyProcessed && !allProcessed)
            {
                return(null);
            }
            //else allProcessed = true
            return(true);
        }
Exemple #3
0
        public async Task <ActionResult <Subtransaction> > PostSubtransaction(Subtransaction subtransaction)
        {
            _context.Subtransactions.Add(subtransaction);
            await _context.SaveChangesAsync();

            return(CreatedAtAction(nameof(GetSubtransaction), new { id = subtransaction.Id }, subtransaction));
        }
Exemple #4
0
        public async Task <IActionResult> PutSubtransaction(int id, Subtransaction subtransaction)
        {
            if (id != subtransaction.Id)
            {
                return(BadRequest());
            }

            _context.Entry(subtransaction).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!SubtransactionExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Exemple #5
0
 private double getTotalCost(Drug d, Policy p, PolicyHolder h, Subtransaction s)
 {
     if (s.Accepted == 1)
     {
         return(Math.Min(h.AmountRemaining, Math.Round(d.CostPer * s.Count * p.PercentCoverage, 2)));
     }
     return(0);
 }
Exemple #6
0
        /// <summary>
        /// Maps a <see cref="Subtransaction"/> to a <see cref="Sale"/>.
        /// </summary>
        /// <param name="subtransaction">The subtransactions to be mapped.</param>
        /// <param name="rate">The commission rate to apply to the subtransactions.</param>
        /// <returns>Mapped <see cref="Sale"/> object.</returns>
        public static Sale FromTransaction(Subtransaction subtransaction, decimal rate)
        {
            var subTotal   = subtransaction.Subtotal;
            var commission = subTotal * rate;
            var sale       = new Sale
            {
                ProductCode = subtransaction.Product.ProductCode,
                ProductName = subtransaction.Product.ProductName,
                Quantity    = subtransaction.Quantity,
                UnitPrice   = subtransaction.TransactionUnitPrice,
                Subtotal    = subTotal,
                Commission  = -commission,
                Total       = subTotal - commission,
            };

            return(sale);
        }
Exemple #7
0
        private IObservable <Subtransaction> CreateSubtransactionFromFee(OrderServiceCharge serviceCharge)
        {
            Product product;

            if (serviceCharge.Name?.Equals("Shipping", StringComparison.OrdinalIgnoreCase) == true)
            {
                product = new Product("TLM-DELIVERY", "TLM-DELIVERY", "Shipping Fees", "Delivery costs charged to customers.", 0.01m);
            }
            else
            {
                product = new Product("TLM-FEES", "TLM-" + serviceCharge.Name, serviceCharge.Name, "Unknown Fee.", 0.01m);
            }

            var quantity    = serviceCharge.TotalMoney.Amount ?? 0;
            var amount      = decimal.Divide(quantity, 100);
            var transaction = new Subtransaction(product, (int)quantity, amount);

            return(Observable.Return(transaction));
        }
Exemple #8
0
        private IObservable <Subtransaction> CreateSubtransactionFromDiscount(OrderLineItemDiscount orderLineItemDiscount)
        {
            Product product;

            if (orderLineItemDiscount.Name.Contains("macaron", StringComparison.OrdinalIgnoreCase))
            {
                product = new Product("BUN-DCM", "BUN-DCM", "Box of Macarons Discount", "Buy 6 macarons for \"£12.00\"", -0.01m);
            }
            else if (orderLineItemDiscount.Name.Contains("pocky", StringComparison.OrdinalIgnoreCase))
            {
                product = new Product("BUN-DCP", "BUN-DCP", "Box of Pocky Discount", "Discount on buying multiple packs of Pocky.", -0.01m);
            }
            else
            {
                product = new Product("TLM-D", "TLM-D", "Other discounts", "Discounts that aren't tracked.", -0.01m);
            }

            var quantity       = orderLineItemDiscount.AppliedMoney.Amount ?? 0;
            var amount         = decimal.Divide(quantity, 100);
            var subtransaction = new Subtransaction(product, (int)quantity, -amount);

            return(Observable.Return(subtransaction));
        }
        private IActionResult SendPrescription(Prescription prescription, List <PrescribedDrug> prescribedDrugs)
        {
            int          holderId    = _verificationContext.VerifiedPatients.First(p => p.Name == prescription.PatientName).Id;
            PTransaction transaction = new PTransaction
            {
                Id       = prescription.Id,
                Date     = prescription.IssuedDate,
                HolderId = holderId
            };

            string json = JsonSerializer.Serialize(transaction);

            var bytes = Encoding.UTF8.GetBytes(json);

#if DEBUG
            var httpRequest = (HttpWebRequest)WebRequest.Create("https://localhost:44306/api/PTransactionsAPI");
#else
            var httpRequest = (HttpWebRequest)WebRequest.Create("https://wngcsp86.intra.uwlax.edu:81/api/PTransactionsAPI");
#endif

            httpRequest.Method        = "POST";
            httpRequest.ContentLength = bytes.Length;
            httpRequest.ContentType   = "application/json";
            Stream dataStream = httpRequest.GetRequestStream();
            dataStream.Write(bytes, 0, bytes.Length);
            dataStream.Close();

            try
            {
                WebResponse response = httpRequest.GetResponse();
            }
            catch (WebException e)
            {
                if (e.Message == "The remote server returned an error: (404) Not Found.")
                {
                    prescription.SentToInsurance = true;
                    foreach (PrescribedDrug pd in prescribedDrugs)
                    {
                        pd.Returned      = true;
                        pd.CoveredAmount = 0;
                        _prescriptionContext.PrescribedDrugs.Update(pd);
                    }
                    _prescriptionContext.Prescriptions.Update(prescription);
                    _prescriptionContext.SaveChanges();
                    return(RedirectToAction("Details", new { id = prescription.Id }));
                }
            }

            foreach (PrescribedDrug pd in prescribedDrugs)
            {
                Subtransaction subtransaction = new Subtransaction
                {
                    Id             = pd.Id,
                    PTransactionId = prescription.Id,
                    DrugId         = pd.DrugId,
                    Count          = pd.Count,
                    AmountPaid     = 0,
                    Accepted       = 0,
                };

                string subtransactionJson = JsonSerializer.Serialize(subtransaction);

                var subtransactionBytes = Encoding.UTF8.GetBytes(subtransactionJson);
#if DEBUG
                var request = (HttpWebRequest)WebRequest.Create("https://localhost:44306/api/SubtransactionsAPI");
#else
                var request = (HttpWebRequest)WebRequest.Create("https://wngcsp86.intra.uwlax.edu:81/api/SubtransactionsAPI");
#endif

                request.Method        = "POST";
                request.ContentLength = subtransactionBytes.Length;
                request.ContentType   = "application/json";
                Stream stream = request.GetRequestStream();
                stream.Write(subtransactionBytes, 0, subtransactionBytes.Length);
                stream.Close();

                WebResponse subtransactionResponse = request.GetResponse();
            }
            return(null);
        }
        private static void getTransactions(UmlActivityDiagram actDiagram, List <Transaction> transactions, List <Request> requests, UmlModel model)
        {
            Transaction    transaction = new Transaction();
            UmlActionState aux_first   = new UmlActionState();
            UmlActionState aux_last    = new UmlActionState();

            foreach (UmlActionState act in actDiagram.UmlObjects.OfType <UmlActionState>())
            {
                try
                {
                    if (!((act is UmlInitialState) || (act is UmlFinalState) || (act is UmlPseudoState)))
                    {
                        String diagramName = act.TaggedValues["jude.hyperlink"];
                        foreach (UmlActivityDiagram actDiagram2 in model.Diagrams.OfType <UmlActivityDiagram>())
                        {
                            if (actDiagram2.Name.Equals(diagramName))
                            {
                                getTransactions(actDiagram2, transactions, requests, model);
                            }
                        }
                    }
                }
                catch
                {
                    if (act.ParentLane == null || act.ParentLane.Name.Equals(""))
                    {
                        transaction = new Transaction();
                        foreach (Request req in requests)
                        {
                            if (req.Name.Equals(act.Name))
                            {
                                transaction.Name  = act.Name;
                                transaction.Begin = req;
                                transaction.End   = req;
                                transactions.Add(transaction);
                                break;
                            }
                        }
                    }
                    else
                    {
                        Boolean exist = false;
                        if (transactions.Count() > 0)
                        {
                            for (int i = 0; i < transactions.Count; i++)
                            {
                                Transaction auxTransaction = transactions[i];
                                if (auxTransaction.Name.Equals(act.ParentLane.Name))
                                {
                                    foreach (Subtransaction sub in auxTransaction.Subtransactions)
                                    {
                                        foreach (UmlActionState element in act.ParentLane.GetElements())
                                        {
                                            if (element.Name.Equals(sub.Name))
                                            {
                                                exist = true;
                                            }
                                        }
                                    }
                                    if (!(auxTransaction.Name.Equals(transaction.Name)))
                                    {
                                        transaction = auxTransaction;
                                    }
                                }
                            }
                        }

                        if (!exist)
                        {
                            transaction = new Transaction();
                            transactions.Add(transaction);

                            transaction.Name            = act.ParentLane.Name;
                            transaction.Requests        = new List <Request>();
                            transaction.Subtransactions = new List <Subtransaction>();

                            aux_first = getLaneFirstState(act.ParentLane, actDiagram);
                            aux_last  = getLaneLastState(act.ParentLane, actDiagram);
                        }

                        Subtransaction subtransaction = new Subtransaction();

                        foreach (Request req in requests)
                        {
                            if (req.Name.Equals(act.Name))
                            {
                                if (req.Name.Equals(aux_first.Name))
                                {
                                    transaction.Begin = req;
                                }
                                if (req.Name.Equals(aux_last.Name))
                                {
                                    transaction.End = req;
                                }

                                subtransaction.Name  = act.Name;
                                subtransaction.Begin = req;
                                subtransaction.End   = req;
                                transaction.Requests.Add(req);
                                transaction.Subtransactions.Add(subtransaction);

                                break;
                            }
                        }
                    }
                }
            }
        }
Exemple #11
0
        private TestCase FillTestCase(Plets.Modeling.FiniteStateMachine.FiniteStateMachine machine, List <Transition> listTransition)
        {
            TestCase testCase = new TestCase();

            testCase.Name        = machine.Name;
            testCase.Probability = actualTestCaseProb;
            Transaction transaction = null;
            bool        existsLane  = false;

            foreach (Transition t in listTransition)
            {
                State s = machine.States.Where(x => x.Name.Equals(t.SourceState.Name)).FirstOrDefault();
                try {
                    existsLane = !String.IsNullOrEmpty(s.TaggedValues["Lane"]);
                } catch {
                    existsLane = false;
                }
                if (existsLane)
                {
                    List <Transaction> transactions = testCase.Transactions.Where(x => x.Name.Equals(s.TaggedValues["Lane"])).ToList();
                    if (transactions.Count == 0)
                    {
                        transaction      = new Transaction();
                        transaction.Name = s.TaggedValues["Lane"];
                        Subtransaction subtransaction = new Subtransaction();
                        subtransaction.Name = t.SourceState.Name;
                        Request request = new Request();
                        request.Name = t.SourceState.Name;
                        GetRequestTags(t, request);
                        subtransaction.Begin = request;
                        subtransaction.End   = request;
                        transaction.Subtransactions.Add(subtransaction);
                        testCase.Transactions.Add(transaction);
                    }
                    else
                    {
                        transaction = transactions.FirstOrDefault();
                        Subtransaction subtransaction = new Subtransaction();
                        subtransaction.Name = t.SourceState.Name;
                        Request request = new Request();
                        request.Name = t.SourceState.Name;
                        GetRequestTags(t, request);
                        subtransaction.Begin = request;
                        subtransaction.End   = request;
                        transaction.Subtransactions.Add(subtransaction);
                    }
                }
                else
                {
                    transaction      = new Transaction();
                    transaction.Name = t.SourceState.Name;
                    Request request = new Request();
                    GetRequestTags(t, request);
                    transaction.Begin = request;
                    transaction.End   = request;
                    testCase.Transactions.Add(transaction);
                }
                AddRequestsToTestCase(testCase, t);
            }

            return(testCase);
        }
Exemple #12
0
        // GET: PTransactions/Details/5
        public async Task <IActionResult> Process(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Subtransaction subtransaction = await _transactionContext.Subtransactions.FirstAsync(s => s.Id == id);

            PTransaction transaction = await _transactionContext.PTransactions.FirstAsync(m => m.Id == subtransaction.PTransactionId);

            PolicyHolder policyHolder = await _policyHolderContext.PolicyHolders.FirstAsync(p => p.Id == transaction.HolderId);

            Policy policy = await _policyContext.Policies.FirstAsync(p => p.Id == policyHolder.Id);

            Drug drug = await _drugContext.Drugs.FirstAsync(d => d.Id == subtransaction.DrugId);

            IQueryable <PolicyDrug> coveredDrugs = _policyDrugContext.PolicyDrugs.Where(pd => pd.PolicyId == policy.Id);

            PolicyDrug pd = coveredDrugs.FirstOrDefault(cd => cd.DrugId == drug.Id);

            bool inDate   = policyHolder.StartDate < DateTime.Now && DateTime.Now < policyHolder.EndDate;
            bool inPolicy = pd != null;

            if (!inDate)
            {
                subtransaction.Accepted = -2;
            }
            else if (!inPolicy)
            {
                subtransaction.Accepted = -1;
            }
            else
            {
                subtransaction.Accepted = 1;
            }

            transaction.Processed = isTransactionProcessed(transaction, subtransaction);

            if (subtransaction.Accepted == 1)
            {
                subtransaction.AmountPaid    = getTotalCost(drug, policy, policyHolder, subtransaction);
                policyHolder.AmountPaid     += subtransaction.AmountPaid;
                policyHolder.AmountRemaining = policy.MaxCoverage - policyHolder.AmountPaid;

                _policyHolderContext.PolicyHolders.Update(policyHolder);
                _policyHolderContext.SaveChanges();
            }
            _transactionContext.PTransactions.Update(transaction);
            _transactionContext.Subtransactions.Update(subtransaction);
            _transactionContext.SaveChanges();

            // Send response to pharmacy
            SendResponse(subtransaction);

            string holderName = "";

            if (policyHolder.Name == HttpContext.Session.GetString(HomeController.HolderName))
            {
                holderName = policyHolder.Name;
            }

            bool includeProcessed = false;

            if (!string.IsNullOrEmpty(HttpContext.Session.GetString(HomeController.IncludeProcessed)))
            {
                includeProcessed = bool.Parse(HttpContext.Session.GetString(HomeController.IncludeProcessed));
            }

            return(RedirectToAction("Details", new { id = transaction.Id }));
        }
        private void UpdateTransactions()
        {
            // add transactions
            var now = DateTime.Now;
            var accounts = _accountRepository.GetAll().ToList();
            var vendors = _vendorRepository.GetAll().ToList();
            var mappedVendors = _importDescriptionVendorMapRepository.GetAll().ToList();
            var transactions = _transactionRepository.GetAll().ToList();
            var importedTransactions = new List<Transaction>();
            var maxTransactionDate = transactions.Any() ? transactions.Max(x => x.OriginalTimestamp) : DateTime.MinValue;

            foreach (ImportRecord row in _transactions.Where(x => x.Date >= maxTransactionDate).OrderBy(x => x.Date))
            {
                // is amount credit or debit?
                var amount = row.Amount * (row.TransactionType.Equals("debit") ? -1.0M : 1.0M);

                // has this transaction already been imported?
                var existingTransaction = transactions.FirstOrDefault(x => x.Amount == amount && x.OriginalTimestamp == row.Date && x.Subtransactions.Any(y => y.Notes.Equals(row.OriginalDescription, StringComparison.CurrentCultureIgnoreCase)));
                if (existingTransaction != null)
                {
                    Console.WriteLine("FOUND {0} {1} : {2}", row.Date.ToShortDateString(), amount, row.OriginalDescription);

                    importedTransactions.Add(existingTransaction);
                    continue;
                }

                Console.WriteLine("create {0} {1} : {2}", row.Date.ToShortDateString(), amount, row.OriginalDescription);

                // find the account in the local cache
                var account = accounts.SingleOrDefault(x => x.AccountNameMaps.Any(y => y.Name.Equals(row.AccountName, StringComparison.CurrentCultureIgnoreCase)));

                // if we didn't find one, make one
                if (account == null)
                {
                    account = new Account()
                    {
                        Name = row.AccountName,
                        AccountGroup = accounts.Any() ? accounts.FirstOrDefault().AccountGroup : new AccountGroup() { Name = row.AccountName },
                        BalanceTimestamp = now
                    };
                    account.AccountNameMaps = new List<AccountNameMap>() { new AccountNameMap() { Account = account, Name = row.AccountName } };

                    _accountRepository.Add(account);
                    _unitOfWork.Commit();
                    accounts.Add(account);
                }

                account.BalanceTimestamp = now;

                // find the vendor in the local cache
                var vendor = vendors.SingleOrDefault(x => x.Name.Equals(row.Description, StringComparison.CurrentCultureIgnoreCase));

                // find the vendor in the description map
                var mappedVendor = mappedVendors.Where(x => x.Description.Equals(row.Description, StringComparison.CurrentCultureIgnoreCase));
                if (mappedVendor.Any())
                {
                    vendor = mappedVendor.FirstOrDefault().Vendor;
                }

                // if we didn't find one, make one
                if (vendor == null)
                {
                    vendor = new Vendor() { Name = row.Description };
                    _vendorRepository.Add(vendor);
                    _unitOfWork.Commit();
                    vendors.Add(vendor);
                }

                Transaction transaction = new Transaction()
                {
                    Timestamp = row.Date,
                    OriginalTimestamp = row.Date,
                    Amount = amount,
                    Vendor = vendor,
                };

                Subtransaction subtransaction = new Subtransaction()
                {
                    Amount = amount,
                    Memo = row.Description,
                    Notes = row.OriginalDescription,
                    CategoryId = account.DefaultCategoryId,
                    IsTransfer = row.Description.StartsWith("Transfer from") || row.Description.StartsWith("Transfer to")
                };

                transaction.Subtransactions.Add(subtransaction);
                account.Transactions.Add(transaction);
                _newTransactions.Add(transaction);
                _unitOfWork.Commit();
            }
        }