«

»

Billing System

Jedná se o MVC aplikaci napsanou v PHP 5.3

Použil jsem Zend Framework 1 a to zejména z důvodu dobré dostupnosti dokumentace a literatury. Další aplikace ale už budu raději vyvíjet v nette nebo jiném frameworku, neboť u Zend-u jsem narazil na dost nečekané a otravné limity zejména v oblasti spolupráce s Ajax, jquery, přizpůsobení vzhledu, atd.

Dále také používám MYSQL 5.5, Apache 2 a APC resp. memcached daemona.

Vstupem jsou textové (csv) tabulky jednotlivých uskutečněných volání (volající, volaný čas zahájení, čas ukončení). Výstupem jsou faktury v pdf a xml pro jednotlivé koncové zákazníky, dále seznamy jednotlivých uskutečněných volání konkrétního uživatele, jež lze v html prohlížet, filtrovat, sumarizovat a řadit podle různých sloupců.

 

Tento projekt je stále ještě ve stádiu vývoje, nebyl zatím předán zadavateli, takže ještě nemohu zveřejňovat veškeré podrobnosti, na které bych chtěl upozornit. Jakmile to bude možné, tento text rozšířím o konkrétní ukázky a zajímavosti, na které jsem v průběhu vývoje této aplikace narazil.

Srdcem vlastní aplikace je výpočet a kontrola cen, jež se z důvodu úspory potřebného výpočetního výkonu provádí najednou a využívám tak efektivně cachování ve všech rovinách výpočtu.
postup výpočtu:
  • Podle volajícího ID (číslo A)  se načtou data uživatele a patřičný ceník uživateli přiřazený.
  • v ceníku se vyhledá tarif odpovídající předčíslí s největším stupněm shody s volaným ID (číslo B)
  • každý ceník má cca 6000 řádků, tedy z důvodu urychlení využíváme cachování pomocí jedné z více možných metod memcached, APC, RAM, RAMDISK
  • podle Timestampu volání se určí, zda se jedná o silný či slabý provoz (svátky, Vánoce, Velikonoce, víkendy atd)
  • na základě údajů z ceníku se určí také tarifikace, která je rozdílná pro různé kategorie uživatelů a také pro různé destinace volání (60+60, 60+1, 30+1, 15+15, 1+1)
  • spočítá se výsledná cena
  • musí se ošetřit přechody mezi vysokým a nízkým tarifem v rámci jednoho hovoru
  • musí se ošetřit různé chytáky ve speciálních tarifech (linky 810, 900,906, 976, 1188, 1301 apod)
  • kontroluje se minimální marže (koncová cena pro zákazníka vs. spojovací poplatky operátorům a poskytovatelům)
  • v případě chyby (nenalezen uživatel nenalezen tarif atd) nejsou faktury vygenerovány a vše se vrátí ze zálohy do původního stavu

 

další je myslím nejlépe patrné ze screenshotů:

přeheled vystavených faktur a plateb

Picture 2 of 19

seznam faktur a plateb uživatele. řazení seznamu možno zvolit vzestupně či sestupně podle jakéhokoliv sloupce.