/** * Obtain top callers by calls. * * @param activity caller activity * @param startBillingDay starting billing day * @return ArrayList with all calls made */ private static ArrayList<CallStat> getTopCallersByCalls() { LinkedList<ContactValue> data = new LinkedList<ContactValue>(); for (Chargeable chargeable : calls) { Call call = (Call) chargeable; Contact contact = call.getContact(); if (data.contains(contact)) { ContactValue contactValue = data.get(data.indexOf(contact)); contactValue.incValue((long) 1); } else { ContactValue contactValue = new ContactValue(contact, (long) 1); data.add(contactValue); } } Collections.sort(data); ArrayList<CallStat> ret = new ArrayList<CallStat>(); int i = 0; for (ContactValue cv : data) { ret.add(new CallStat(cv.getContact().getContactName(), String.valueOf(cv.getValue()))); i++; if (i > 20) { break; } } return ret; }
public PlanSummary process(ArrayList<Chargeable> data) { PlanSummary ret = new PlanSummary(this); ret.addPlanCall( new PlanChargeable( new ChargeableMessage(ChargeableMessage.MESSAGE_MONTH_FEE), monthFee, this.getCurrency())); int smsSent = 0; int secondsTotal = 0; for (Chargeable chargeable : data) { if (chargeable.getChargeableType() == Chargeable.CHARGEABLE_TYPE_CALL) { Call call = (Call) chargeable; if (call.getType() != Call.CALL_TYPE_SENT) { continue; } double callPrice = 0; if (call.getContact().getMsisdnType() == MsisdnType.UK_SPECIAL_ZER0) { callPrice = 0; } else { secondsTotal += call.getDuration(); boolean insidePlan = secondsTotal <= maxSecondsMonth; if (!insidePlan) { long duration = (secondsTotal > maxSecondsMonth) && (secondsTotal - call.getDuration() <= maxSecondsMonth) ? secondsTotal - maxSecondsMonth : call.getDuration(); callPrice += initialPrice + (duration * pricePerSecond); } } ret.addPlanCall(new PlanChargeable(call, callPrice, this.getCurrency())); } else if (chargeable.getChargeableType() == Chargeable.CHARGEABLE_TYPE_SMS) { Sms sms = (Sms) chargeable; if (sms.getType() == Sms.SMS_TYPE_RECEIVED) { continue; } smsSent++; ret.addPlanCall( new PlanChargeable( chargeable, (smsSent > maxFreeSMS) ? smsPrice : 0, this.getCurrency())); } } return ret; }