- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
Map<Organization, Collection<IFormula>> comissionFormulasMap = getComissionFormulae(bank, service, a);
transIterator:
for (Transaction T : afterBillingMemorandum) {//для каждой транзакции
if (comissionFormulasMap.isEmpty()) {
//System.out.println("Нет формулы для комиссии");
afterComissionSet.add(T); //если нет формулы для определения комиссии транзакция попадает в список на расщепление
} else {
BigDecimal transactionStartValue = T.getStartValue();
Set<Transaction> afterComissionForCurrent = new HashSet<>();
BigDecimal fullTax = BigDecimal.ZERO;
Collection<IFormula> comissionsAKT = new LinkedList<>();
for (Map.Entry<Organization, Collection<IFormula>> comissionsByBank : comissionFormulasMap.entrySet()) {
Organization comissionBank = comissionsByBank.getKey();
for (IFormula f : comissionsByBank.getValue()) {//для каждой формулы по комиссии
GeneratedTransactionTypes transactionType = f.getGeneratedTransactionTypes(comissionBank);
if (transactionType == GeneratedTransactionTypes.AKT) {
comissionsAKT.add(f);
} else {
BigDecimal commie = f.commission(transactionStartValue);//Определяем значение комиссии
if (commie.compareTo(BigDecimal.ZERO) == 0)
continue; //Комиссия 0 нам не интересна, переходим к следующей формуле
fullTax = fullTax.add(commie);//складываем комиссии
if (fullTax.compareTo(transactionStartValue) == 1) {
log.error("Помилка зняття комісії. Сума комісій більша 100 %. Транзакція не буде оброблена. Транзакція: {}", T.toBaseString());
continue transIterator;
} else {
afterComissionForCurrent.add(T.getComissionTransaction(f.getOrganization(), commie, transactionType));
}
}
}
}
//
// afterComissionSet.addAll(afterComissionForCurrent);
// afterComissionForCurrent.clear();
//Далі зняття по акту
BigDecimal afterComissionStartValue = transactionStartValue.subtract(fullTax);
BigDecimal aktFullTax = BigDecimal.ZERO;
for (IFormula f : comissionsAKT) {
GeneratedTransactionTypes transactionType = GeneratedTransactionTypes.AKT;
BigDecimal commie = f.commission(afterComissionStartValue);
if (commie.compareTo(BigDecimal.ZERO) == 0)
continue;
BigDecimal newFullTax = aktFullTax.add(commie);
if (newFullTax.compareTo(afterComissionStartValue) > 0) {
continue;
}
aktFullTax = newFullTax;
afterComissionForCurrent.add(T.getComissionTransaction(f.getOrganization(), commie, transactionType));
}
afterComissionSet.add(T.getRestTransaction(fullTax.add(aktFullTax)));
afterComissionSet.addAll(afterComissionForCurrent);
}
}
Писал один товарещ, притом взрослый и сформировавшийся как личность )
Her 30.06.2015 17:56 # 0
3_14dar 30.06.2015 22:20 # 0