Example #1
0
        public static void DiscardFacture(int id)
        {
            AccountFacture f = Get(id);

            f.Discard = true;
            AccountFacture.Table.Context.SubmitChanges();
            IEnumerable <AccountFactureItemPolicyItem> afipiList = AccountFactureItemPolicyItem.GetByAccountFacture(id);

            foreach (AccountFactureItemPolicyItem afipi in afipiList)
            {
                PolicyItem pi = PolicyItem.Get(afipi.PolicyItemID);
                pi.IsAccountFactured = false;
                PolicyItem.Table.Context.SubmitChanges();
            }
        }
Example #2
0
        public static AccountFacture Generate(string factureNumber, DateTime startDate, DateTime endDate, InsuranceCompany ic, User u, DateTime dateOfPayment, List <PolicyItem> policiesToInclude, Branch branch)
        {
            decimal brokerageValue                          = 0;
            decimal totalSum                                = 0;
            decimal currentBrokerageValue                   = 0;
            Dictionary <int, decimal[]>   dictionary        = new Dictionary <int, decimal[]>();
            Dictionary <int, List <int> > dictionaryPolList = new Dictionary <int, List <int> >();

            foreach (PolicyItem policyItem in policiesToInclude)
            {
                if (policyItem.Policy.PacketID != null)
                {
                    if (policyItem.Policy.Client.IsLaw)
                    {
                        currentBrokerageValue = policyItem.PremiumValue * policyItem.PacketsInsuranceSubType.BrokeragePecentageForLaws / 100;
                    }
                    else
                    {
                        currentBrokerageValue = policyItem.PremiumValue * policyItem.PacketsInsuranceSubType.BrokeragePecentageForPrivates / 100;
                    }
                }
                else
                {
                    if (policyItem.Policy.Client.IsLaw)
                    {
                        currentBrokerageValue = policyItem.PremiumValue * policyItem.Brokerage.PercentageForLaws / 100;
                    }
                    else
                    {
                        currentBrokerageValue = policyItem.PremiumValue * policyItem.Brokerage.PercentageForPrivates / 100;
                    }
                }
                brokerageValue += currentBrokerageValue;
                if (dictionary.ContainsKey(policyItem.InsuranceSubTypeID))
                {
                    dictionary[policyItem.InsuranceSubTypeID][0] += currentBrokerageValue;
                    dictionary[policyItem.InsuranceSubTypeID][1] += policyItem.PremiumValue;
                    //dictionary[policyItem.InsuranceSubTypeID][2] += 1;
                    dictionaryPolList[policyItem.InsuranceSubTypeID].Add(policyItem.ID);
                }
                else
                {
                    decimal[] newValues = { currentBrokerageValue, policyItem.PremiumValue /*, 1*/ };
                    dictionary.Add(policyItem.InsuranceSubTypeID, newValues);
                    List <int> cL = new List <int>();
                    cL.Add(policyItem.ID);
                    dictionaryPolList.Add(policyItem.InsuranceSubTypeID, cL);
                }
                totalSum += policyItem.PremiumValue;
            }


            //da se zemat vo predvid i zaokruzuvanjata
            decimal calcBrokValue = 0;

            foreach (KeyValuePair <int, decimal[]> kvp in dictionary)
            {
                calcBrokValue += ScaleController.Scale5(kvp.Value[0]);
            }


            if (policiesToInclude.Count > 0)
            {
                AccountFacture f = new AccountFacture();
                //f.BrokerageValue = ScaleController.Scale5(brokerageValue);
                f.BrokerageValue = calcBrokValue;
                f.TotalCost      = totalSum;
                int    clientID = 1;
                Client client   = Client.GetByEmbg(ic.EMBG);
                if (client != null)
                {
                    clientID = client.ID;
                }
                else
                {
                    Client newClient = new Client();
                    newClient.Address            = ic.Address;
                    newClient.EMail              = string.Empty;
                    newClient.EMBG               = ic.EMBG;
                    newClient.Fax                = string.Empty;
                    newClient.IsInsuranceCompany = true;
                    newClient.Mobile             = string.Empty;
                    newClient.Name               = ic.Name;
                    newClient.Phone              = string.Empty;
                    newClient.PlaceID            = Place.Table.First().ID;
                    newClient.Insert();
                    clientID = newClient.ID;
                }
                f.ClientID           = clientID;
                f.DateOfCreation     = DateTime.Today;
                f.DocumentSubTypeID  = DocumentSubType.GetByCode(DocumentSubType.FAKTURA_PROVIZIJA).ID;
                f.FactureNumber      = factureNumber; //CodeGenerator.GenerateFactureNumber();
                f.FromDate           = startDate;
                f.ToDate             = endDate;
                f.BranchID           = branch.ID;
                f.StatusID           = Statuse.GetByCode(Statuse.NEPLATENA_IZLEZNA_FAKTURA_ZA_PROVIZIJA).ID;
                f.DateOfPayment      = dateOfPayment;
                f.Discard            = false;
                f.InsuranceCompanyID = ic.ID;
                f.UserID             = u.ID;
                f.IsAccountBooked    = false;
                f.Insert();

                int ordinalNumber = 1;
                foreach (KeyValuePair <int, decimal[]> kvPair in dictionary)
                {
                    AccountFactureItem fi = new AccountFactureItem();
                    fi.FactureID          = f.ID;
                    fi.BrokerageValue     = ScaleController.Scale5(kvPair.Value[0]);
                    fi.PremiumValue       = kvPair.Value[1];
                    fi.Number             = ordinalNumber;
                    fi.InsuranceSubTypeID = kvPair.Key;
                    fi.Count       = dictionaryPolList[kvPair.Key].Count;
                    fi.Description = InsuranceSubType.Get(kvPair.Key).ShortDescription;
                    ordinalNumber++;
                    fi.Insert();
                    AccountFactureItemPolicyItem.InsertForFacture(fi.ID, dictionaryPolList[kvPair.Key]);
                }
                PolicyItem.SetIsAccountFactured(policiesToInclude);
                return(f);
            }
            return(null);
        }