<?php
class Employee
{
public $rank;
public $rate;
public $isBoss;
public $profession;
public function __construct($rank, $rate, $isBoss, $profession)
{
$this->rank = $rank;
$this->rate = $rate;
$this->isBoss = $isBoss;
$this->profession = $profession;
}
public function GetSalary()
{
switch ($this->rank) {
case 1:
$salary=$this->rate;
break;
case 2:
$salary=$this->rate*1.25;
break;
case 3:
$salary=$this->rate*1.5;
break;
}
$salary=($this->isBoss==1)? $salary*1.5 : $salary;
return $salary;
}
public function GetCoffe()
{
return $coffe;
}
public function GetPages()
{
return $pages;
}
}
class Manager extends Employee
{
const COFFE=20;
const PAGES=200;
}
class Marketer extends Employee
{
const COFFE=15;
const PAGES=150;
}
class Engineer extends Employee
{
const COFFE=5;
const PAGES=50;
}
class Analyst extends Employee
{
const COFFE=75;
const PAGES=5;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
abstract class AbstractDepartment
{
public $numberOfWorkers;
public $rank;
public $rate;
public $isBoss;
public $profession;
public function __construct($numberOfWorkers, $rank, $rate, $isBoss, $profession)
{
$this->numberOfWorkers = $numberOfWorkers;
switch ($profession) {
case 'Менеджер':
$empl=new Manager($rank, $rate, $isBoss, $profession);
$this->rank = $empl->rank;
$this->rate = $empl->rate;
$this->isBoss = $empl->isBoss;
$this->profession = $empl->profession;
$this->obj = $empl; break;
case 'Маркетолог':
$empl=new Marketer($rank, $rate, $isBoss, $profession);
$this->rank = $empl->rank;
$this->rate = $empl->rate;
$this->isBoss = $empl->isBoss;
$this->profession = $empl->profession;
$this->obj = $empl; break;
case 'Инженер':
$empl=new Engineer($rank, $rate, $isBoss, $profession);
$this->rank = $empl->rank;
$this->rate = $empl->rate;
$this->isBoss = $empl->isBoss;
$this->profession = $empl->profession;
$this->obj = $empl; break;
case 'Аналитик':
$empl=new Analyst($rank, $rate, $isBoss, $profession);
$this->rank = $empl->rank;
$this->rate = $empl->rate;
$this->isBoss = $empl->isBoss;
$this->profession = $empl->profession;
$this->obj = $empl; break;
}
}
public function GetTotalWorkers($dep)
{
$totalWorkers=0;
foreach ($dep as $depUnit) {
$totalWorkers+=$depUnit->numberOfWorkers;
}
return $totalWorkers;
}
public function GetTotalSalary($dep)
{
$totalSalary=0;
foreach ($dep as $depUnit) {
$totalSalary+=($depUnit->obj->GetSalary()*$depUnit->numberOfWorkers);
}
return $totalSalary;
}
public function GetTotalCoffe($dep)
{
$totalCoffe=0;
foreach ($dep as $depUnit) {
$totalCoffe+=($depUnit->obj->GetCoffe()*$depUnit->numberOfWorkers);
}
return $totalCoffe;
}
public function GetTotalPages($dep)
{
$totalPages=0;
foreach ($dep as $depUnit) {
$totalPages+=($depUnit->obj->GetPages()*$depUnit->numberOfWorkers);
}
return $totalPages;
}
public function GetSalaryPerPage($dep)
{ $salaryPerPage=0;
$salaryPerPage=round($this->GetTotalSalary($dep)/$this->GetTotalPages($dep),2);
return $salaryPerPage;}
}
class BuyDepartment extends AbstractDepartment
{
public $depName='Департамент закупок';
}
class SalesDepartment extends AbstractDepartment
{
public $depName='Департамент продаж';
}
class AdvDepartment extends AbstractDepartment
{
public $depName='Департамент рекламы';
}
class LogDepartment extends AbstractDepartment
{
public $depName='Департамент логистики';
}