<?php
class Document{
private $code;
private $date;
private $costumer;
private $total;
private $vat;
private $imp;
private $i;
public $items;
public $template;
public function __construct($code, $date, $costumer){
$this->i = 0;
$this->template = 'document.tpl.php';
$this->code = $code;
$this->date = $date;
$this->costumer = $costumer;
$this->items = array();
}
public function addItem($title, $code, $qnt, $price, $nVat){
$this->i++;
$item = new Item($code, $title, $qnt, $price, $nVat, $this->i, $this);
$this->items[$this->i] = $item;
$this->totaliDocumento();
return $item;
}
public function removeItem($item){
if(isset($this->items[$item->getKey()])){
unset($this->items[$item->getKey()]);
$this->totaliDocumento();
}
}
public function changeQnt($item, $newQnt){
if(isset($this->items[$item->getKey()])){
$item->changeQnt($newQnt);
$this->totaliDocumento();
}
}
public function totaliDocumento(){
$this->total = 0;
$this->vat = 0;
$this->imp = 0;
foreach($this->items AS $item){
$this->total += $item->getImporto('totale');
$this->imp += $item->getImporto('imponibile');
$this->vat += $item->getImporto('iva');
}
}
public function attr($attr){
return $this->$attr;
}
public function output(){
$document = $this;
include($this->template);
}
public function outputItem($item){
include($item->template);
}
}
class Item Document{
private $qnt;
private $prezzo;
private $cIva;
public $titolo;
public $codice;
public $template;
private $rayKey;
private $documento;
private $totale;
private $imponibile;
private $iva;
public function __construct($codice, $titolo, $qnt, $prezzo, $cIva, $key, $documento){
$this->template = 'item.tpl.php';
$this->documento = $documento;
$this->rayKey = $key;
$this->codice = $codice;
$this->titolo = $titolo;
$this->qnt = $qnt;
$this->prezzo = $prezzo;
$this->cIva = $cIva;
$this->calcolaTotali();
}
public function getKey(){
return $this->rayKey;
}
public function aggiornaQnt($qnt){
$this->qnt = $qnt;
$this->calcolaTotali();
}
public function aggiornaPrezzo($prezzo){
$this->prezzo = $prezzo;
$this->calcolaTotali();
}
private function calcolaTotali(){
$this->imponibile = $this->qnt * $this->prezzo;
$this->iva = ($this->imponibile * $this->cIva) / 100;
$this->totale = $this->imponibile + $this->iva;
$this->documento->totaliDocumento();
}
public function getImporto($importo = 'totale'){
switch($importo){
case 'totale':
return $this->totale;
break;
case 'imponibile':
return $this->imponibile;
break;
case 'iva':
return $this->iva;
break;
}
}
public function attr($attr){
return $this->$attr;
}
public function output(){
$item = $this;
include($this->template);
}
}
?>