Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/MemberBundle/Services/
Upload File :
Current File : /var/www/v3.cesa.co.za/src/MemberBundle/Services/MemberFirmManager.php

<?php

namespace App\MemberBundle\Services;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Monolog\Logger;
use App\ContactBundle\Services\MessageManager;
use App\MemberBundle\Entity\MemberFirm;
use App\CoreBundle\Services\Utils;

/**
 * Member Firm List Old manager
 *
 * @author Otto Saayman <otto@igotafrica.com>
 * @package MemberBundle
 * @subpackage MemberFirm
 * @version 0.0.1
 */
final class MemberFirmManager
{

    /**
     * Service Container
     * @var object
     */
    private $container = null;

    /**
     * Entity manager
     * @var object
     */
    private $em;

    /**
     * Class construct
     *
     * @param  ContainerInterface $container
     * @param  Logger             $logger
     * @return void
     */
    public function __construct(
        ContainerInterface $container
    ) {
        $this->setContainer($container);
        $this->setEm($container->get('doctrine')->getManager('default'));

        return;
    }

    /**
     * Get Container
     *
     * @return ContainerInterface $container
     */
    public function getContainer()
    {
        return $this->container;
    }

    /**
     * Set Container
     *
     * @param  ContainerInterface $container
     * @return void
     */
    public function setContainer($container)
    {
        $this->container = $container;
    }

    /**
     * Get Entity Manager
     *
     * @return string
     */
    public function getEm()
    {
        return $this->em;
    }

    /**
     * Set Container
     *
     * @param  string $em
     * @return void
     */
    public function setEm($em)
    {
        $this->em = $em;
    }

    /**
     * Get a Member Firm
     *
     * @return MemberFirm
     */
    public function find($id)
    {

        if (strlen($id) <= 0) {
            return null;
        }

        return $this->em->getRepository(MemberFirm::class)->find($id);
    }

    /**
     * Get a Member Firm by parameters
     *
     * @param array $params
     * @return MemberFirm
     */
    public function findOneBy($params)
    {
        return $this->em->getRepository(MemberFirm::class)->findOneBy($params);
    }

    /**
     * Get a Member Firm by parameters
     *
     * @param array $params
     * @return array
     */
    public function findBy($params)
    {
        return $this->em->getRepository(MemberFirm::class)->findBy($params);
    }

    /**
     * Get all Member Firms
     *
     * @return array
     */
    public function findAll()
    {
        return $this->em->getRepository(MemberFirm::class)->findAll();
    }

    /**
     * Get all Member Firm IDs
     *
     * @return array
     */
    public function findAllIds()
    {
        return $this->em->getRepository(MemberFirm::class)->findAllIds();
    }

    /**
     * Save a Member Firm
     *
     * @params MemberFirm $memberFirm
     * @return MemberFirm
     */
    public function save(MemberFirm &$memberFirm)
    {

        $this->em->persist($memberFirm);
        $this->em->flush();

        return $memberFirm;
    }

    /**
     * Save a Member Firm
     *
     * @params MemberFirm $memberFirm
     * @return MemberFirm
     */
    public function findOrAdd(
        &$toBeAdded,
        &$toBeUpdated,
        $allMembers,
        $email,
        $status,
        $firstName = '',
        $lastName = '',
        $tag = ''
    ) {

        if (!Utils::isEmailAddressValid($email)) {
            return;
        }

        if (strlen($tag) <= 0) {
            echo 'No tag for ' . $email . '<br />' . "\r\n";
            return;
        }

        $email = str_replace('.coza', '.co.za', $email);

        //check if attendee is in list
        $mustAdd = true;
        $mustTag = true;
        $updateMailId = '';

        foreach ($allMembers as $mailId => $member) {

            if (trim(strtolower($member['email_address'])) == trim(strtolower($email))) {
                $mustAdd = false;
                $updateMailId = $mailId;
            }

            if (!is_countable($member['tags']) || count($member['tags']) <= 0) {
                continue;
            }

            foreach ($member['tags'] as $oneTag) {
                // var_dump($oneTag);
                // echo "\r\n" . ' tag!' . "\r\n";
                if ($oneTag['name'] == $tag) {
                    $mustTag = false;
                }
            }
        } //foreach

        if ($mustAdd) {
            foreach ($toBeAdded as $checkOne) {
                if (trim(strtolower($checkOne['email_address'])) == trim(strtolower($email))) {
                    $mustAdd = false;
                }
            }
        }

        if ($mustAdd) {
            $toBeAdded[] = [
                'email_address' => $email,
                'status' => $status,
                'merge_fields' => ['FNAME' => $firstName, 'LNAME' => $lastName],
                'tags' => ["Member", $tag]
            ];
            echo 'Added ' . count($toBeAdded) . ' - ' . $email . '<br />' . "\r\n";
        } elseif ($mustTag && strlen($updateMailId) > 0) {
            $toBeUpdated[] = [
                'subscriber_id' => $updateMailId,
                'email_address' => $email,
                // 'tags' => ["Member", $tag]
                'tags' => [['name' => $tag, 'status' => 'active'], ['name' => "Member", 'status' => 'active']]
            ];
            echo 'Updated ' . count($toBeAdded) . ' - ' . $email . '<br />' . "\r\n";
        }
    }

    /**
     * Save a Member Firm
     *
     * @return void
     */
    public function mailChimpSynch()
    {

        $mcCreds = MessageManager::getMCCredentials();
        $messageManager = $this->getContainer()->get('contact_message.manager');
        $tempValueManager = $this->getContainer()->get('temp_value.manager');

        $startAt = 1; //$tempValueManager->getTempValue('mailchimp_member_synch_start', 1);

        echo 'Member firm synch starts now<br />' . "\r\n";
        //        exit;

        $allMembers = $messageManager->getAllEMailsFromMailChimp($mcCreds['api_key'], $mcCreds['main_audience']);

        echo "Found " . count($allMembers) . " members in MailChimp <br />" . "\r\n";
        //        echo '<br /><br />';
        //        exit;

        $toBeAdded = [];
        $toBeUpdated = [];
        $memberFirms = $this->findAllIds();
        $endAt = count($memberFirms) + 10; //$startAt + 50;
        $recordCount = 1;

        echo 'Running member synch: ' . $startAt . ' ' . $endAt . '<br />' . "\r\n";
        //        exit;

        foreach ($memberFirms as $memberFirmId) {

            if ($recordCount < $startAt) {
                continue;
            }

            if ($startAt > $endAt) {
                break;
            }

            $memberFirm = $this->find($memberFirmId['id']);

            if (!is_object($memberFirm)) {
                echo 'Firm not found: ' . $memberFirmId['id'] . '<br />' . "\r\n";
                continue;
            }

            if (!in_array(strtolower($memberFirm->getMemberStatus()), array('member', 'retired member', 'honorary member'))) {
                echo 'Firm status not valid member: ' . $memberFirmId['id'] . '<br />' . "\r\n";
                continue;
            }

            $subscribed = 'subscribed';

            if (!is_null($memberFirm->getMarketingEmail()) && strlen($memberFirm->getMarketingEmail()) > 0) {
                $this->findOrAdd(
                    $toBeAdded,
                    $toBeUpdated,
                    $allMembers,
                    $memberFirm->getMarketingEmail(),
                    $subscribed,
                    $memberFirm->getMarketingContact(),
                    '',
                    'Member Marketing'
                );
            }

            if (!is_null($memberFirm->getSubscriptionsEmail()) && strlen($memberFirm->getSubscriptionsEmail()) > 0) {
                $this->findOrAdd(
                    $toBeAdded,
                    $toBeUpdated,
                    $allMembers,
                    $memberFirm->getSubscriptionsEmail(),
                    $subscribed,
                    $memberFirm->getSubscriptionsContact(),
                    '',
                    'Member Subscriptions'
                );
            }

            if (!is_null($memberFirm->getHrTrainingEmail()) && strlen($memberFirm->getHrTrainingEmail()) > 0) {
                $this->findOrAdd(
                    $toBeAdded,
                    $toBeUpdated,
                    $allMembers,
                    $memberFirm->getHrTrainingEmail(),
                    $subscribed,
                    $memberFirm->getHrTrainingContact(),
                    '',
                    'Member HR and Training'
                );
            }

            if (!is_null($memberFirm->getYpfEmail()) && strlen($memberFirm->getYpfEmail()) > 0) {
                $this->findOrAdd(
                    $toBeAdded,
                    $toBeUpdated,
                    $allMembers,
                    $memberFirm->getYpfEmail(),
                    $subscribed,
                    $memberFirm->getYpfContact(),
                    '',
                    'Member YPF'
                );
            }

            if (!is_null($memberFirm->getQmsChampEmail()) && strlen($memberFirm->getQmsChampEmail()) > 0) {
                $this->findOrAdd(
                    $toBeAdded,
                    $toBeUpdated,
                    $allMembers,
                    $memberFirm->getQmsChampEmail(),
                    $subscribed,
                    $memberFirm->getQmsChampName(),
                    '',
                    'Member QMS Champion'
                );
            }

            if (!is_null($memberFirm->getSustainabilityChampEmail()) && strlen($memberFirm->getSustainabilityChampEmail()) > 0) {
                $this->findOrAdd(
                    $toBeAdded,
                    $toBeUpdated,
                    $allMembers,
                    $memberFirm->getSustainabilityChampEmail(),
                    $subscribed,
                    $memberFirm->getSustainabilityChampName(),
                    '',
                    'Member Sustainability Champion'
                );
            }

            if (!is_null($memberFirm->getProcurementEmail()) && strlen($memberFirm->getProcurementEmail()) > 0) {
                $this->findOrAdd(
                    $toBeAdded,
                    $toBeUpdated,
                    $allMembers,
                    $memberFirm->getProcurementEmail(),
                    $subscribed,
                    $memberFirm->getProcurementContact(),
                    '',
                    'Member Procurement'
                );
            }

            foreach ($memberFirm->getMemberOffice() as $office) {
                foreach ($office->getMemberContact() as $contact) {

                    if (!is_null($contact->getEmail()) && strlen($contact->getEmail()) > 0) {

                        $this->findOrAdd(
                            $toBeAdded,
                            $toBeUpdated,
                            $allMembers,
                            $contact->getEmail(),
                            $subscribed,
                            $contact->getContactFirstName(),
                            $contact->getContactSurname(),
                            'Member Office Contact'
                        );

                        if ($contact->isMandatedPrincipal()) {
                            $this->findOrAdd(
                                $toBeAdded,
                                $toBeUpdated,
                                $allMembers,
                                $contact->getEmail(),
                                $subscribed,
                                $contact->getContactFirstName(),
                                $contact->getContactSurname(),
                                'Member Mandated Principal Office Contact'
                            );
                        }

                        if ($contact->isPrincipal()) {
                            $this->findOrAdd(
                                $toBeAdded,
                                $toBeUpdated,
                                $allMembers,
                                $contact->getEmail(),
                                $subscribed,
                                $contact->getContactFirstName(),
                                $contact->getContactSurname(),
                                'Member Principal Office Contact'
                            );
                        }

                        if ($contact->isOfficeHead()) {
                            $this->findOrAdd(
                                $toBeAdded,
                                $toBeUpdated,
                                $allMembers,
                                $contact->getEmail(),
                                $subscribed,
                                $contact->getContactFirstName(),
                                $contact->getContactSurname(),
                                'Member Office Head'
                            );
                        }

                        if (!is_null($contact->getYpf()) && strtolower($contact->getYpf()) == 'y') {
                            $this->findOrAdd(
                                $toBeAdded,
                                $toBeUpdated,
                                $allMembers,
                                $contact->getEmail(),
                                $subscribed,
                                $contact->getContactFirstName(),
                                $contact->getContactSurname(),
                                'Member YPF'
                            );
                        }
                    }
                } //foreach member contact
            } //foreach member office

            if (count($toBeAdded) > 200) {

                $messageManager->addToMailChimp($mcCreds['api_key'], $mcCreds['main_audience'], $toBeAdded);

                //                var_dump($toBeAdded);
                //                exit;

                // var_dump($toBeAdded);
                // exit;

                $toBeAdded = array();
            }

            if (count($toBeUpdated) > 200) {

                $messageManager->updateTagsMailChimp($mcCreds['api_key'], $mcCreds['main_audience'], $toBeUpdated);

                //                var_dump($toBeAdded);
                //                exit;

                // var_dump($toBeUpdated);
                // exit;

                $toBeUpdated = array();
            }

            $recordCount++;
            $startAt++;
        } //foreach member firm

        echo 'Member synch done: ' . $startAt . ' ' . $startAt . '<br />' . "\r\n";

        $tempValueManager->setTempValue('mailchimp_member_synch_start', $startAt);

        if (count($toBeAdded) > 0) {
            $messageManager->addToMailChimp($mcCreds['api_key'], $mcCreds['main_audience'], $toBeAdded);
        }

        if (count($toBeUpdated) > 0) {
            $messageManager->updateTagsMailChimp($mcCreds['api_key'], $mcCreds['main_audience'], $toBeUpdated);
        }
    }

    public function processStats($members)
    {

        $statsStart = array(
            '10' => array('num' => 0, 'turnover' => 0.00),
            '30' => array('num' => 0, 'turnover' => 0.00),
            '51' => array('num' => 0, 'turnover' => 0.00),
            '1130' => array('num' => 0, 'turnover' => 0.00),
            '1025' => array('num' => 0, 'turnover' => 0.00),
            '30' => array('num' => 0, 'turnover' => 0.00),
            '2550' => array('num' => 0, 'turnover' => 0.00),
            '3050' => array('num' => 0, 'turnover' => 0.00),
            '5199' => array('num' => 0, 'turnover' => 0.00),
            '31100' => array('num' => 0, 'turnover' => 0.00),
            '51100' => array('num' => 0, 'turnover' => 0.00),
            '100' => array('num' => 0, 'turnover' => 0.00),
        );

        $demos = [
            'ma' => 0,
            'mc' => 0,
            'mi' => 0,
            'mw' => 0,
            'mf' => 0,
            'fa' => 0,
            'fc' => 0,
            'fi' => 0,
            'fw' => 0,
            'ff' => 0,
            'male' => 0,
            'female' => 0,
        ];

        $staffDemographics = [
            'tm' => $demos,
            'sm' => $demos,
            'pro' => $demos,
            'skilled' => $demos,
            'semi' => $demos,
            'unskill' => $demos,
            'temp' => $demos,
            'totals' => $demos,
            'male_total' => 0,
            'female_total' => 0,
            'total' => 0,
            'black_owned_total' => 0,
        ];

        $countStaff = ['num' => 0, 'staff' => 0, 'transformation' => $staffDemographics];

        $turnOverCategoriesArray = [
            'NotSpecified' => $countStaff,
            'EME1' => $countStaff,
            'EME2' => $countStaff,
            'QSE1' => $countStaff,
            'QSE2' => $countStaff,
            'QSE3' => $countStaff,
            'QSE4' => $countStaff,
            'GEN1' => $countStaff,
            'GEN2' => $countStaff,
            'GEN3' => $countStaff,
            'GEN4' => $countStaff,
            'GEN5' => $countStaff,
            'GEN6' => $countStaff,
            'GEN7' => $countStaff,
            'GEN8' => $countStaff,
        ];

        $bbbeeLevelArray = [
            'Level1' => 0,
            'Level2' => 0,
            'Level3' => 0,
            'Level4' => 0,
            'Level5' => 0,
            'Level6' => 0,
            'Level7' => 0,
            'Level8' => 0,
        ];

        $statistics = array(
            'black_women_owned' => $statsStart,
            'black_owned' => $statsStart,
            'women_owned' => $statsStart,
            'total' => array('num' => 0, 'turnover' => 0.00, 'online' => 0, 'offline' => 0),
            'total_black_owned' => array('num' => 0, 'turnover' => 0.00),
            'total_not_black_owned' => array('num' => 0, 'turnover' => 0.00),
            'turnover' => array(
                'overall' => $turnOverCategoriesArray,
                'black_owned' => $turnOverCategoriesArray,
                'not_black_owned' => $turnOverCategoriesArray,
            ),
            'staff' => $staffDemographics,
            'bbbeeLevels' => $bbbeeLevelArray,
            'staff_levels_to_check' => [],
            'total_captured' => 0,
            'member_rows' => [],
        );

        $fieldTransformed = [
            'BlackOwned' => 'black_owned',
            'BlackWomenOwned' => 'black_women_owned',
            'BlackWomenOwnedVal' => 'black_women_owned_val',
            'WomenOwned' => 'women_owned',
            'TotalStaff' => 'total_staff',
            'ThreeYearsAverageTurnover' => 'three_years_average_turnover',
            'SMME' => 'smme',
            'TransTopMA' => 'trans_top_ma',
            'TransTopMC' => 'trans_top_mc',
            'TransTopMI' => 'trans_top_mi',
            'TransTopMW' => 'trans_top_mw',
            'TransTopMN' => 'trans_top_mf',
            'TransTopFA' => 'trans_top_fa',
            'TransTopFC' => 'trans_top_fc',
            'TransTopFI' => 'trans_top_fi',
            'TransTopFW' => 'trans_top_fw',
            'TransTopFN' => 'trans_top_ff',
            'TransSeniorMA' => 'trans_senior_ma',
            'TransSeniorMC' => 'trans_senior_mc',
            'TransSeniorMI' => 'trans_senior_mi',
            'TransSeniorMW' => 'trans_senior_mw',
            'TransSeniorMN' => 'trans_senior_mf',
            'TransSeniorFA' => 'trans_senior_fa',
            'TransSeniorFC' => 'trans_senior_fc',
            'TransSeniorFI' => 'trans_senior_fi',
            'TransSeniorFW' => 'trans_senior_fw',
            'TransSeniorFN' => 'trans_senior_ff',
            'TransProfMA' => 'trans_prof_ma',
            'TransProfMC' => 'trans_prof_mc',
            'TransProfMI' => 'trans_prof_mi',
            'TransProfMW' => 'trans_prof_mw',
            'TransProfMN' => 'trans_prof_mf',
            'TransProfFA' => 'trans_prof_fa',
            'TransProfFC' => 'trans_prof_fc',
            'TransProfFI' => 'trans_prof_fi',
            'TransProfFW' => 'trans_prof_fw',
            'TransProfFN' => 'trans_prof_ff',
            'TransSkilledMA' => 'trans_skilled_ma',
            'TransSkilledMC' => 'trans_skilled_mc',
            'TransSkilledMI' => 'trans_skilled_mi',
            'TransSkilledMW' => 'trans_skilled_mw',
            'TransSkilledMN' => 'trans_skilled_mf',
            'TransSkilledFA' => 'trans_skilled_fa',
            'TransSkilledFC' => 'trans_skilled_fc',
            'TransSkilledFI' => 'trans_skilled_fi',
            'TransSkilledFW' => 'trans_skilled_fw',
            'TransSkilledFN' => 'trans_skilled_ff',
            'TransSemiMA' => 'trans_semi_ma',
            'TransSemiMC' => 'trans_semi_mc',
            'TransSemiMI' => 'trans_semi_mi',
            'TransSemiMW' => 'trans_semi_mw',
            'TransSemiMN' => 'trans_semi_mf',
            'TransSemiFA' => 'trans_semi_fa',
            'TransSemiFC' => 'trans_semi_fc',
            'TransSemiFI' => 'trans_semi_fi',
            'TransSemiFW' => 'trans_semi_fw',
            'TransSemiFN' => 'trans_semi_ff',
            'TransUnskillMA' => 'trans_unskill_ma',
            'TransUnskillMC' => 'trans_unskill_mc',
            'TransUnskillMI' => 'trans_unskill_mi',
            'TransUnskillMW' => 'trans_unskill_mw',
            'TransUnskillMN' => 'trans_unskill_mf',
            'TransUnskillFA' => 'trans_unskill_fa',
            'TransUnskillFC' => 'trans_unskill_fc',
            'TransUnskillFI' => 'trans_unskill_fi',
            'TransUnskillFW' => 'trans_unskill_fw',
            'TransUnskillFN' => 'trans_unskill_ff',
            'TransTempMA' => 'trans_temp_ma',
            'TransTempMC' => 'trans_temp_mc',
            'TransTempMI' => 'trans_temp_mi',
            'TransTempMW' => 'trans_temp_mw',
            'TransTempMN' => 'trans_temp_mf',
            'TransTempFA' => 'trans_temp_fa',
            'TransTempFC' => 'trans_temp_fc',
            'TransTempFI' => 'trans_temp_fi',
            'TransTempFW' => 'trans_temp_fw',
            'TransTempFN' => 'trans_temp_ff',
            'BBBEELevel' => 'bbbee_level',
            'ManualCaptured' => 'manual_captured',
        ];

        foreach ($members as $member) {
            $memberId = 0;
            if (isset($member['id']) && intval($member['id']) > 0) {
                $memberId = intval($member['id']);
            } elseif (isset($member['FirmID']) && intval($member['FirmID']) > 0) {
                $memberId = intval($member['FirmID']);
                $member['id'] = $memberId;
            } elseif (isset($member['Prev_FirmID']) && intval($member['Prev_FirmID']) > 0) {
                $memberId = intval($member['Prev_FirmID']);
                $member['id'] = $memberId;
            }

            if (!isset($member['firm_name']) && isset($member['FirmName'])) {
                $member['firm_name'] = $member['FirmName'];
            }

            if (!isset($member['declaration_received']) && isset($member['DeclarationReceived'])) {
                $member['declaration_received'] = $member['DeclarationReceived'];
            }

            if (!isset($member['smme']) && isset($member['SMME'])) {
                $member['smme'] = $member['SMME'];
            }

            // $statistics['member_rows'][] = $member;

            // var_dump(array_keys($member));
            // exit;
            // echo $member['TransProfMA'] . '<br />';
            //Transform fields
            foreach ($fieldTransformed as $old => $new) {
                if (!isset($member[$new]) && isset($member[$old])) {
                    $member[$new] = $member[$old];
                }
            }

            //Black Owned
            if (!isset($member['black_owned']) || is_null($member['black_owned']) || strlen($member['black_owned']) <= 0) {
                $member['black_owned'] = 'Less than 10%';
            }

            //Black Women Owned
            if (!isset($member['black_women_owned']) || is_null($member['black_women_owned']) || strlen($member['black_women_owned']) <= 0) {
                $member['black_women_owned'] = 'Less than 10%';
            }

            //Women Owned
            if (!isset($member['women_owned']) || is_null($member['women_owned']) || strlen($member['women_owned']) <= 0) {
                $member['women_owned'] = 'Less than 10%';
            }

            // echo $member['black_women_owned'] . '<br />';

            //Total staff
            if (!isset($member['total_staff'])) {
                $member['total_staff'] = 0;
            }

            //Turnover Categories
            if (!isset($member['three_years_average_turnover'])) {
                $member['three_years_average_turnover'] = 0;
            }

            if (!isset($member['smme']) || strlen($member['smme']) <= 0) {
                $member['smme'] = 'EME1';
            }

            if ((!isset($member['black_women_owned']) || strlen($member['black_women_owned']) <= 0)
                && isset($member['black_women_owned_val']) && strlen($member['black_women_owned_val']) > 0
            ) {
                $member['black_women_owned'] = $member['black_women_owned_val'];
            }

            //Transform fields
            foreach ($fieldTransformed as $old => $new) {
                if (!isset($member[$new])) {
                    $member[$new] = 0;
                }
            }

            if (in_array($member['smme'], ['EME', 'E', 's', 'u'])) {
                $member['smme'] = 'EME1';
            } elseif (in_array($member['smme'], ['QSE', 'Q', 'm'])) {
                $member['smme'] = 'QSE1';
            } elseif (in_array($member['smme'], ['GEN', 'G', 'l'])) {
                $member['smme'] = 'GEN1';
            }

            if ($member['three_years_average_turnover'] >= 100000000) {
                $member['smme'] = 'GEN8';
            } elseif ($member['three_years_average_turnover'] >= 90000000) {
                $member['smme'] = 'GEN7';
            } elseif ($member['three_years_average_turnover'] >= 80000000) {
                $member['smme'] = 'GEN6';
            } elseif ($member['three_years_average_turnover'] >= 70000000) {
                $member['smme'] = 'GEN5';
            } elseif ($member['three_years_average_turnover'] >= 60000000) {
                $member['smme'] = 'GEN4';
            } elseif ($member['three_years_average_turnover'] >= 50000000) {
                $member['smme'] = 'GEN3';
            } elseif ($member['three_years_average_turnover'] >= 35000000) {
                $member['smme'] = 'GEN2';
            } elseif ($member['three_years_average_turnover'] >= 25000000) {
                $member['smme'] = 'GEN1';
            } elseif ($member['three_years_average_turnover'] >= 20000000) {
                $member['smme'] = 'QSE4';
            } elseif ($member['three_years_average_turnover'] >= 15000000) {
                $member['smme'] = 'QSE3';
            } elseif ($member['three_years_average_turnover'] >= 10000000) {
                $member['smme'] = 'QSE2';
            } elseif ($member['three_years_average_turnover'] >= 6000000) {
                $member['smme'] = 'QSE1';
            } elseif ($member['three_years_average_turnover'] >= 3000000) {
                $member['smme'] = 'EME2';
            } elseif ($member['three_years_average_turnover'] > 0) {
                $member['smme'] = 'EME1';
            } elseif ($member['smme'] == '') {
                $member['smme'] = 'NotSpecified';
            }

            if ($member['bbbee_level'] == 1) {
                $statistics['bbbeeLevels']['Level1'] += 1;
            } elseif ($member['bbbee_level'] == 2) {
                $statistics['bbbeeLevels']['Level2'] += 1;
            } elseif ($member['bbbee_level'] == 3) {
                $statistics['bbbeeLevels']['Level3'] += 1;
            } elseif ($member['bbbee_level'] == 4) {
                $statistics['bbbeeLevels']['Level4'] += 1;
            } elseif ($member['bbbee_level'] == 5) {
                $statistics['bbbeeLevels']['Level5'] += 1;
            } elseif ($member['bbbee_level'] == 6) {
                $statistics['bbbeeLevels']['Level6'] += 1;
            } elseif ($member['bbbee_level'] == 7) {
                $statistics['bbbeeLevels']['Level7'] += 1;
            } else {
                $statistics['bbbeeLevels']['Level8'] += 1;
            }

            if (!isset($statistics['turnover']['black_owned'][$member['smme']])) {
                $statistics['turnover']['black_owned'][$member['smme']] = [
                    'num' => 0,
                    'staff' => 0,
                    'turnover' => 0,
                ];
            }

            if (!isset($statistics['turnover']['not_black_owned'][$member['smme']])) {
                $statistics['turnover']['not_black_owned'][$member['smme']] = [
                    'num' => 0,
                    'staff' => 0,
                    'turnover' => 0,
                ];
            }

            $member['black_owned'] = trim($member['black_owned']);

            if (in_array($member['black_owned'], array(
                'Less than 10%',
                '<10%',
                'Less than 10',
                'N',
                'No',
                'Less than 10',
                '0'
            ))) {
                $statistics['black_owned']['10']['num']++;
                $statistics['black_owned']['10']['turnover'] += $member['three_years_average_turnover'];
                $statistics['black_owned']['51']['num']++;
                $statistics['black_owned']['51']['turnover'] += $member['three_years_average_turnover'];

                $statistics['turnover']['not_black_owned'][$member['smme']]['num'] += 1;
                $statistics['turnover']['not_black_owned'][$member['smme']]['staff'] += $member['total_staff'];

                $statistics['total_not_black_owned']['num']++;
                $statistics['total_not_black_owned']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array($member['black_owned'], array(
                'Equal to or greater than 10 and less than 25%',
                '≥10%<25%',
                'L',
                'Less than 30',
                'Equal to or greater than 10 and less than 25'
            ))) {
                $statistics['black_owned']['1025']['num']++;
                $statistics['black_owned']['1025']['turnover'] += $member['three_years_average_turnover'];
                $statistics['black_owned']['51']['num']++;
                $statistics['black_owned']['51']['turnover'] += $member['three_years_average_turnover'];

                $statistics['turnover']['not_black_owned'][$member['smme']]['num'] += 1;
                $statistics['turnover']['not_black_owned'][$member['smme']]['staff'] += $member['total_staff'];

                $statistics['total_not_black_owned']['num']++;
                $statistics['total_not_black_owned']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array($member['black_owned'], array(
                'Equal to or greater than 25 and less than 51%',
                '≥25%<51%',
                'Equal to or greater than 25 and less than 51',
                'Equal to or greater than 30 and less than 51'
            ))) {
                $statistics['black_owned']['2550']['num']++;
                $statistics['black_owned']['2550']['turnover'] += $member['three_years_average_turnover'];
                $statistics['black_owned']['51']['num']++;
                $statistics['black_owned']['51']['turnover'] += $member['three_years_average_turnover'];

                $statistics['turnover']['not_black_owned'][$member['smme']]['num'] += 1;
                $statistics['turnover']['not_black_owned'][$member['smme']]['staff'] += $member['total_staff'];

                $statistics['total_not_black_owned']['num']++;
                $statistics['total_not_black_owned']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array($member['black_owned'], array(
                'Equal to or greater than 51 and less than 100%',
                '≥51%<100%',
                'E',
                'Equal to or greater than 51 and less than 100'
            ))) {
                $statistics['black_owned']['5199']['num']++;
                $statistics['black_owned']['5199']['turnover'] += $member['three_years_average_turnover'];
                $statistics['black_owned']['51100']['num']++;
                $statistics['black_owned']['51100']['turnover'] += $member['three_years_average_turnover'];

                $statistics['turnover']['black_owned'][$member['smme']]['num'] += 1;
                $statistics['turnover']['black_owned'][$member['smme']]['staff'] += $member['total_staff'];

                $statistics['total_black_owned']['num']++;
                $statistics['total_black_owned']['turnover'] += $member['three_years_average_turnover'];
                $statistics['staff']['black_owned_total'] += $member['total_staff'];
            } elseif (in_array($member['black_owned'], array('100%', 'B', 'Equal to 100', 'Black Owned', '1'))) {
                $statistics['black_owned']['100']['num']++;
                $statistics['black_owned']['100']['turnover'] += $member['three_years_average_turnover'];
                $statistics['black_owned']['51100']['num']++;
                $statistics['black_owned']['51100']['turnover'] += $member['three_years_average_turnover'];

                $statistics['turnover']['black_owned'][$member['smme']]['num'] += 1;
                $statistics['turnover']['black_owned'][$member['smme']]['staff'] += $member['total_staff'];

                $statistics['total_black_owned']['num']++;
                $statistics['total_black_owned']['turnover'] += $member['three_years_average_turnover'];
                $statistics['staff']['black_owned_total'] += $member['total_staff'];
            }

            $member['black_women_owned'] = trim($member['black_women_owned']);

            if (in_array($member['black_women_owned'], array('Less than 10%'))) {
                $statistics['black_women_owned']['10']['num']++;
                $statistics['black_women_owned']['10']['turnover'] += $member['three_years_average_turnover'];
                $statistics['black_women_owned']['30']['num']++;
                $statistics['black_women_owned']['30']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array(
                $member['black_women_owned'],
                array('Less than 30', 'Less than 30%', '<30', '<30%', 'Equal to or greater than 10 and less than 30%')
            )) {
                $statistics['black_women_owned']['30']['num']++;
                $statistics['black_women_owned']['30']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array($member['black_women_owned'], array(
                'Equal to or greater than 30 and less than 51%',
                '≥30%<51%',
                'Equal to or greater than 30 and less than 51'
            ))) {
                $statistics['black_women_owned']['3050']['num']++;
                $statistics['black_women_owned']['3050']['turnover'] += $member['three_years_average_turnover'];
                $statistics['black_women_owned']['31100']['num']++;
                $statistics['black_women_owned']['31100']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array($member['black_women_owned'], array(
                'Equal to or greater than 51 and less than 100%',
                '≥51%<100%',
                'Equal to or greater than 51 and less than 100'
            ))) {
                $statistics['black_women_owned']['5199']['num']++;
                $statistics['black_women_owned']['5199']['turnover'] += $member['three_years_average_turnover'];
                $statistics['black_women_owned']['31100']['num']++;
                $statistics['black_women_owned']['31100']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array($member['black_women_owned'], array('100%', 'Equal to 100'))) {
                $statistics['black_women_owned']['100']['num']++;
                $statistics['black_women_owned']['100']['turnover'] += $member['three_years_average_turnover'];
                $statistics['black_women_owned']['31100']['num']++;
                $statistics['black_women_owned']['31100']['turnover'] += $member['three_years_average_turnover'];
            }

            $member['women_owned'] = trim($member['women_owned']);

            if (in_array($member['women_owned'], array('Less than 10%'))) {
                $statistics['women_owned']['10']['num']++;
                $statistics['women_owned']['10']['turnover'] += $member['three_years_average_turnover'];
                $statistics['women_owned']['30']['num']++;
                $statistics['women_owned']['30']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array(
                $member['women_owned'],
                array('Less than 30', 'Less than 30%', '<30', '<30%', 'Equal to or greater than 10 and less than 30%')
            )) {
                $statistics['women_owned']['30']['num']++;
                $statistics['women_owned']['30']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array($member['women_owned'], array(
                'Equal to or greater than 30 and less than 51%',
                '≥30%<51%',
                'Equal to or greater than 30 and less than 51'
            ))) {
                $statistics['women_owned']['3050']['num']++;
                $statistics['women_owned']['3050']['turnover'] += $member['three_years_average_turnover'];
                $statistics['women_owned']['31100']['num']++;
                $statistics['women_owned']['31100']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array($member['women_owned'], array(
                'Equal to or greater than 51 and less than 100%',
                '≥51%<100%',
                'Equal to or greater than 51 and less than 100'
            ))) {
                $statistics['women_owned']['5199']['num']++;
                $statistics['women_owned']['5199']['turnover'] += $member['three_years_average_turnover'];
                $statistics['women_owned']['31100']['num']++;
                $statistics['women_owned']['31100']['turnover'] += $member['three_years_average_turnover'];
            } elseif (in_array($member['women_owned'], array('100%', 'Equal to 100'))) {
                $statistics['women_owned']['100']['num']++;
                $statistics['women_owned']['100']['turnover'] += $member['three_years_average_turnover'];
                $statistics['women_owned']['31100']['num']++;
                $statistics['women_owned']['31100']['turnover'] += $member['three_years_average_turnover'];
            }

            $statistics['total']['num']++;
            $statistics['total']['turnover'] += $member['three_years_average_turnover'];

            if (isset($member['manual_captured']) && $member['manual_captured'] == 1) {
                $statistics['total']['offline']++;
            } else {
                $statistics['total']['online']++;
            }

            if (!isset($statistics['turnover']['overall'][$member['smme']])) {
                $statistics['turnover']['overall'][$member['smme']] = [
                    'num' => 0,
                    'staff' => 0,
                    'turnover' => 0,
                ];
            }

            $statistics['turnover']['overall'][$member['smme']]['staff'] += $member['total_staff'];

            $statistics['turnover']['overall'][$member['smme']]['num'] += 1;

            if (!isset($statistics['turnover']['overall'][$member['smme']]['transformation'])) {
                $statistics['turnover']['overall'][$member['smme']]['transformation'] = [
                    'tm' => [
                        'ma' => 0,
                        'mc' => 0,
                        'mi' => 0,
                        'mw' => 0,
                        'mf' => 0,
                        'fa' => 0,
                        'fc' => 0,
                        'fi' => 0,
                        'fw' => 0,
                        'ff' => 0,
                    ],
                    'sm' => [
                        'ma' => 0,
                        'mc' => 0,
                        'mi' => 0,
                        'mw' => 0,
                        'mf' => 0,
                        'fa' => 0,
                        'fc' => 0,
                        'fi' => 0,
                        'fw' => 0,
                        'ff' => 0,
                    ],
                    'pro' => [
                        'ma' => 0,
                        'mc' => 0,
                        'mi' => 0,
                        'mw' => 0,
                        'mf' => 0,
                        'fa' => 0,
                        'fc' => 0,
                        'fi' => 0,
                        'fw' => 0,
                        'ff' => 0,
                    ],
                    'skilled' => [
                        'ma' => 0,
                        'mc' => 0,
                        'mi' => 0,
                        'mw' => 0,
                        'mf' => 0,
                        'fa' => 0,
                        'fc' => 0,
                        'fi' => 0,
                        'fw' => 0,
                        'ff' => 0,
                    ],
                    'semi' => [
                        'ma' => 0,
                        'mc' => 0,
                        'mi' => 0,
                        'mw' => 0,
                        'mf' => 0,
                        'fa' => 0,
                        'fc' => 0,
                        'fi' => 0,
                        'fw' => 0,
                        'ff' => 0,
                    ],
                    'unskill' => [
                        'ma' => 0,
                        'mc' => 0,
                        'mi' => 0,
                        'mw' => 0,
                        'mf' => 0,
                        'fa' => 0,
                        'fc' => 0,
                        'fi' => 0,
                        'fw' => 0,
                        'ff' => 0,
                    ],
                    'temp' => [
                        'ma' => 0,
                        'mc' => 0,
                        'mi' => 0,
                        'mw' => 0,
                        'mf' => 0,
                        'fa' => 0,
                        'fc' => 0,
                        'fi' => 0,
                        'fw' => 0,
                        'ff' => 0,
                    ],
                ];
            }

            // Top Management
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['ma'] += $member['trans_top_ma'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['mc'] += $member['trans_top_mc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['mi'] += $member['trans_top_mi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['mw'] += $member['trans_top_mw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['mf'] += $member['trans_top_mf'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['fa'] += $member['trans_top_fa'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['fc'] += $member['trans_top_fc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['fi'] += $member['trans_top_fi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['fw'] += $member['trans_top_fw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['tm']['ff'] += $member['trans_top_ff'];

            // Senior Management
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['ma'] += $member['trans_senior_ma'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['mc'] += $member['trans_senior_mc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['mi'] += $member['trans_senior_mi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['mw'] += $member['trans_senior_mw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['mf'] += $member['trans_senior_mf'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['fa'] += $member['trans_senior_fa'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['fc'] += $member['trans_senior_fc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['fi'] += $member['trans_senior_fi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['fw'] += $member['trans_senior_fw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['sm']['ff'] += $member['trans_senior_ff'];

            // Professional
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['ma'] += $member['trans_prof_ma'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['mc'] += $member['trans_prof_mc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['mi'] += $member['trans_prof_mi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['mw'] += $member['trans_prof_mw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['mf'] += $member['trans_prof_mf'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['fa'] += $member['trans_prof_fa'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['fc'] += $member['trans_prof_fc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['fi'] += $member['trans_prof_fi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['fw'] += $member['trans_prof_fw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['pro']['ff'] += $member['trans_prof_ff'];

            // Skilled
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['ma'] += $member['trans_skilled_ma'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['mc'] += $member['trans_skilled_mc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['mi'] += $member['trans_skilled_mi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['mw'] += $member['trans_skilled_mw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['mf'] += $member['trans_skilled_mf'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['fa'] += $member['trans_skilled_fa'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['fc'] += $member['trans_skilled_fc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['fi'] += $member['trans_skilled_fi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['fw'] += $member['trans_skilled_fw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['skilled']['ff'] += $member['trans_skilled_ff'];

            // Semi-Skilled
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['ma'] += $member['trans_semi_ma'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['mc'] += $member['trans_semi_mc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['mi'] += $member['trans_semi_mi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['mw'] += $member['trans_semi_mw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['mf'] += $member['trans_semi_mf'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['fa'] += $member['trans_semi_fa'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['fc'] += $member['trans_semi_fc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['fi'] += $member['trans_semi_fi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['fw'] += $member['trans_semi_fw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['semi']['ff'] += $member['trans_semi_ff'];

            // Unskilled
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['ma'] += $member['trans_unskill_ma'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['mc'] += $member['trans_unskill_mc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['mi'] += $member['trans_unskill_mi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['mw'] += $member['trans_unskill_mw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['mf'] += $member['trans_unskill_mf'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['fa'] += $member['trans_unskill_fa'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['fc'] += $member['trans_unskill_fc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['fi'] += $member['trans_unskill_fi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['fw'] += $member['trans_unskill_fw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['unskill']['ff'] += $member['trans_unskill_ff'];

            // Temp
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['ma'] += $member['trans_temp_ma'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['mc'] += $member['trans_temp_mc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['mi'] += $member['trans_temp_mi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['mw'] += $member['trans_temp_mw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['mf'] += $member['trans_temp_mf'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['fa'] += $member['trans_temp_fa'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['fc'] += $member['trans_temp_fc'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['fi'] += $member['trans_temp_fi'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['fw'] += $member['trans_temp_fw'];
            $statistics['turnover']['overall'][$member['smme']]['transformation']['temp']['ff'] += $member['trans_temp_ff'];

            //Transformation
            // Top Management
            $statistics['staff']['tm']['ma'] += $member['trans_top_ma'];
            $statistics['staff']['tm']['mc'] += $member['trans_top_mc'];
            $statistics['staff']['tm']['mi'] += $member['trans_top_mi'];
            $statistics['staff']['tm']['mw'] += $member['trans_top_mw'];
            $statistics['staff']['tm']['mf'] += $member['trans_top_mf'];
            $statistics['staff']['tm']['fa'] += $member['trans_top_fa'];
            $statistics['staff']['tm']['fc'] += $member['trans_top_fc'];
            $statistics['staff']['tm']['fi'] += $member['trans_top_fi'];
            $statistics['staff']['tm']['fw'] += $member['trans_top_fw'];
            $statistics['staff']['tm']['ff'] += $member['trans_top_ff'];
            $statistics['staff']['tm']['male'] += $member['trans_top_ma'] + $member['trans_top_mc'] + $member['trans_top_mi'] + $member['trans_top_mw'] + $member['trans_top_mf'];
            $statistics['staff']['tm']['female'] += $member['trans_top_fa'] + $member['trans_top_fc'] + $member['trans_top_fi'] + $member['trans_top_fw'] + $member['trans_top_ff'];

            // Senior Management
            $statistics['staff']['sm']['ma'] += $member['trans_senior_ma'];
            $statistics['staff']['sm']['mc'] += $member['trans_senior_mc'];
            $statistics['staff']['sm']['mi'] += $member['trans_senior_mi'];
            $statistics['staff']['sm']['mw'] += $member['trans_senior_mw'];
            $statistics['staff']['sm']['mf'] += $member['trans_senior_mf'];
            $statistics['staff']['sm']['fa'] += $member['trans_senior_fa'];
            $statistics['staff']['sm']['fc'] += $member['trans_senior_fc'];
            $statistics['staff']['sm']['fi'] += $member['trans_senior_fi'];
            $statistics['staff']['sm']['fw'] += $member['trans_senior_fw'];
            $statistics['staff']['sm']['ff'] += $member['trans_senior_ff'];
            $statistics['staff']['sm']['male'] += $member['trans_senior_ma'] + $member['trans_senior_mc'] + $member['trans_senior_mi'] + $member['trans_senior_mw'] + $member['trans_senior_mf'];
            $statistics['staff']['sm']['female'] += $member['trans_senior_fa'] + $member['trans_senior_fc'] + $member['trans_senior_fi'] + $member['trans_senior_fw'] + $member['trans_senior_ff'];

            // Professional
            $statistics['staff']['pro']['ma'] += $member['trans_prof_ma'];
            $statistics['staff']['pro']['mc'] += $member['trans_prof_mc'];
            $statistics['staff']['pro']['mi'] += $member['trans_prof_mi'];
            $statistics['staff']['pro']['mw'] += $member['trans_prof_mw'];
            $statistics['staff']['pro']['mf'] += $member['trans_prof_mf'];
            $statistics['staff']['pro']['fa'] += $member['trans_prof_fa'];
            $statistics['staff']['pro']['fc'] += $member['trans_prof_fc'];
            $statistics['staff']['pro']['fi'] += $member['trans_prof_fi'];
            $statistics['staff']['pro']['fw'] += $member['trans_prof_fw'];
            $statistics['staff']['pro']['ff'] += $member['trans_prof_ff'];
            $statistics['staff']['pro']['male'] += $member['trans_prof_ma'] + $member['trans_prof_mc'] + $member['trans_prof_mi'] + $member['trans_prof_mw'] + $member['trans_prof_mf'];
            $statistics['staff']['pro']['female'] += $member['trans_prof_fa'] + $member['trans_prof_fc'] + $member['trans_prof_fi'] + $member['trans_prof_fw'] + $member['trans_prof_ff'];

            // Skilled
            $statistics['staff']['skilled']['ma'] += $member['trans_skilled_ma'];
            $statistics['staff']['skilled']['mc'] += $member['trans_skilled_mc'];
            $statistics['staff']['skilled']['mi'] += $member['trans_skilled_mi'];
            $statistics['staff']['skilled']['mw'] += $member['trans_skilled_mw'];
            $statistics['staff']['skilled']['mf'] += $member['trans_skilled_mf'];
            $statistics['staff']['skilled']['fa'] += $member['trans_skilled_fa'];
            $statistics['staff']['skilled']['fc'] += $member['trans_skilled_fc'];
            $statistics['staff']['skilled']['fi'] += $member['trans_skilled_fi'];
            $statistics['staff']['skilled']['fw'] += $member['trans_skilled_fw'];
            $statistics['staff']['skilled']['ff'] += $member['trans_skilled_ff'];
            $statistics['staff']['skilled']['male'] += $member['trans_skilled_ma'] + $member['trans_skilled_mc'] + $member['trans_skilled_mi'] + $member['trans_skilled_mw'] + $member['trans_skilled_mf'];
            $statistics['staff']['skilled']['female'] += $member['trans_skilled_fa'] + $member['trans_skilled_fc'] + $member['trans_skilled_fi'] + $member['trans_skilled_fw'] + $member['trans_skilled_ff'];

            // Semi-Skilled
            $statistics['staff']['semi']['ma'] += $member['trans_semi_ma'];
            $statistics['staff']['semi']['mc'] += $member['trans_semi_mc'];
            $statistics['staff']['semi']['mi'] += $member['trans_semi_mi'];
            $statistics['staff']['semi']['mw'] += $member['trans_semi_mw'];
            $statistics['staff']['semi']['mf'] += $member['trans_semi_mf'];
            $statistics['staff']['semi']['fa'] += $member['trans_semi_fa'];
            $statistics['staff']['semi']['fc'] += $member['trans_semi_fc'];
            $statistics['staff']['semi']['fi'] += $member['trans_semi_fi'];
            $statistics['staff']['semi']['fw'] += $member['trans_semi_fw'];
            $statistics['staff']['semi']['ff'] += $member['trans_semi_ff'];
            $statistics['staff']['semi']['male'] += $member['trans_semi_ma'] + $member['trans_semi_mc'] + $member['trans_semi_mi'] + $member['trans_semi_mw'] + $member['trans_semi_mf'];
            $statistics['staff']['semi']['female'] += $member['trans_semi_fa'] + $member['trans_semi_fc'] + $member['trans_semi_fi'] + $member['trans_semi_fw'] + $member['trans_semi_ff'];

            // Unskilled
            $statistics['staff']['unskill']['ma'] += $member['trans_unskill_ma'];
            $statistics['staff']['unskill']['mc'] += $member['trans_unskill_mc'];
            $statistics['staff']['unskill']['mi'] += $member['trans_unskill_mi'];
            $statistics['staff']['unskill']['mw'] += $member['trans_unskill_mw'];
            $statistics['staff']['unskill']['mf'] += $member['trans_unskill_mf'];
            $statistics['staff']['unskill']['fa'] += $member['trans_unskill_fa'];
            $statistics['staff']['unskill']['fc'] += $member['trans_unskill_fc'];
            $statistics['staff']['unskill']['fi'] += $member['trans_unskill_fi'];
            $statistics['staff']['unskill']['fw'] += $member['trans_unskill_fw'];
            $statistics['staff']['unskill']['ff'] += $member['trans_unskill_ff'];
            $statistics['staff']['unskill']['male'] += $member['trans_unskill_ma'] + $member['trans_unskill_mc'] + $member['trans_unskill_mi'] + $member['trans_unskill_mw'] + $member['trans_unskill_mf'];
            $statistics['staff']['unskill']['female'] += $member['trans_unskill_fa'] + $member['trans_unskill_fc'] + $member['trans_unskill_fi'] + $member['trans_unskill_fw'] + $member['trans_unskill_ff'];

            // Temp
            $statistics['staff']['temp']['ma'] += $member['trans_temp_ma'];
            $statistics['staff']['temp']['mc'] += $member['trans_temp_mc'];
            $statistics['staff']['temp']['mi'] += $member['trans_temp_mi'];
            $statistics['staff']['temp']['mw'] += $member['trans_temp_mw'];
            $statistics['staff']['temp']['mf'] += $member['trans_temp_mf'];
            $statistics['staff']['temp']['fa'] += $member['trans_temp_fa'];
            $statistics['staff']['temp']['fc'] += $member['trans_temp_fc'];
            $statistics['staff']['temp']['fi'] += $member['trans_temp_fi'];
            $statistics['staff']['temp']['fw'] += $member['trans_temp_fw'];
            $statistics['staff']['temp']['ff'] += $member['trans_temp_ff'];
            $statistics['staff']['temp']['male'] += $member['trans_temp_ma'] + $member['trans_temp_mc'] + $member['trans_temp_mi'] + $member['trans_temp_mw'] + $member['trans_temp_mf'];
            $statistics['staff']['temp']['female'] += $member['trans_temp_fa'] + $member['trans_temp_fc'] + $member['trans_temp_fi'] + $member['trans_temp_fw'] + $member['trans_temp_ff'];

            // Totals
            $statistics['staff']['totals']['ma'] += $member['trans_top_ma'] + $member['trans_senior_ma'] + $member['trans_prof_ma'] + $member['trans_skilled_ma'] + $member['trans_semi_ma'] + $member['trans_unskill_ma'] + $member['trans_temp_ma'];
            $statistics['staff']['totals']['mc'] += $member['trans_top_mc'] + $member['trans_senior_mc'] + $member['trans_prof_mc'] + $member['trans_skilled_mc'] + $member['trans_semi_mc'] + $member['trans_unskill_mc'] + $member['trans_temp_mc'];
            $statistics['staff']['totals']['mi'] += $member['trans_top_mi'] + $member['trans_senior_mi'] + $member['trans_prof_mi'] + $member['trans_skilled_mi'] + $member['trans_semi_mi'] + $member['trans_unskill_mi'] + $member['trans_temp_mi'];
            $statistics['staff']['totals']['mw'] += $member['trans_top_mw'] + $member['trans_senior_mw'] + $member['trans_prof_mw'] + $member['trans_skilled_mw'] + $member['trans_semi_mw'] + $member['trans_unskill_mw'] + $member['trans_temp_mw'];
            $statistics['staff']['totals']['mf'] += $member['trans_top_mf'] + $member['trans_senior_mf'] + $member['trans_prof_mf'] + $member['trans_skilled_mf'] + $member['trans_semi_mf'] + $member['trans_unskill_mf'] + $member['trans_temp_mf'];
            $statistics['staff']['totals']['fa'] += $member['trans_top_fa'] + $member['trans_senior_fa'] + $member['trans_prof_fa'] + $member['trans_skilled_fa'] + $member['trans_semi_fa'] + $member['trans_unskill_fa'] + $member['trans_temp_fa'];
            $statistics['staff']['totals']['fc'] += $member['trans_top_fc'] + $member['trans_senior_fc'] + $member['trans_prof_fc'] + $member['trans_skilled_fc'] + $member['trans_semi_fc'] + $member['trans_unskill_fc'] + $member['trans_temp_fc'];
            $statistics['staff']['totals']['fi'] += $member['trans_top_fi'] + $member['trans_senior_fi'] + $member['trans_prof_fi'] + $member['trans_skilled_fi'] + $member['trans_semi_fi'] + $member['trans_unskill_fi'] + $member['trans_temp_fi'];
            $statistics['staff']['totals']['fw'] += $member['trans_top_fw'] + $member['trans_senior_fw'] + $member['trans_prof_fw'] + $member['trans_skilled_fw'] + $member['trans_semi_fw'] + $member['trans_unskill_fw'] + $member['trans_temp_fw'];
            $statistics['staff']['totals']['ff'] += $member['trans_top_ff'] + $member['trans_senior_ff'] + $member['trans_prof_ff'] + $member['trans_skilled_ff'] + $member['trans_semi_ff'] + $member['trans_unskill_ff'] + $member['trans_temp_ff'];

            $totalMale =  $member['trans_top_ma'] + $member['trans_senior_ma'] + $member['trans_prof_ma'] + $member['trans_skilled_ma'] + $member['trans_semi_ma'] + $member['trans_unskill_ma'] + $member['trans_temp_ma'] +
                $member['trans_top_mc'] + $member['trans_senior_mc'] + $member['trans_prof_mc'] + $member['trans_skilled_mc'] + $member['trans_semi_mc'] + $member['trans_unskill_mc'] + $member['trans_temp_mc'] +
                $member['trans_top_mi'] + $member['trans_senior_mi'] + $member['trans_prof_mi'] + $member['trans_skilled_mi'] + $member['trans_semi_mi'] + $member['trans_unskill_mi'] + $member['trans_temp_mi'] +
                $member['trans_top_mw'] + $member['trans_senior_mw'] + $member['trans_prof_mw'] + $member['trans_skilled_mw'] + $member['trans_semi_mw'] + $member['trans_unskill_mw'] + $member['trans_temp_mw'] +
                $member['trans_top_mf'] + $member['trans_senior_mf'] + $member['trans_prof_mf'] + $member['trans_skilled_mf'] + $member['trans_semi_mf'] + $member['trans_unskill_mf'] + $member['trans_temp_mf'];

            $totalFemale = $member['trans_top_fa'] + $member['trans_senior_fa'] + $member['trans_prof_fa'] + $member['trans_skilled_fa'] + $member['trans_semi_fa'] + $member['trans_unskill_fa'] + $member['trans_temp_fa'] +
                $member['trans_top_fc'] + $member['trans_senior_fc'] + $member['trans_prof_fc'] + $member['trans_skilled_fc'] + $member['trans_semi_fc'] + $member['trans_unskill_fc'] + $member['trans_temp_fc'] +
                $member['trans_top_fi'] + $member['trans_senior_fi'] + $member['trans_prof_fi'] + $member['trans_skilled_fi'] + $member['trans_semi_fi'] + $member['trans_unskill_fi'] + $member['trans_temp_fi'] +
                $member['trans_top_fw'] + $member['trans_senior_fw'] + $member['trans_prof_fw'] + $member['trans_skilled_fw'] + $member['trans_semi_fw'] + $member['trans_unskill_fw'] + $member['trans_temp_fw'] +
                $member['trans_top_ff'] + $member['trans_senior_ff'] + $member['trans_prof_ff'] + $member['trans_skilled_ff'] + $member['trans_semi_ff'] + $member['trans_unskill_ff'] + $member['trans_temp_ff'];

            $statistics['staff']['male_total'] += $totalMale;

            $statistics['staff']['female_total'] += $totalFemale;

            $statistics['staff']['total'] += $member['total_staff'];

            if ($memberId > 0 && !isset($statistics['member_rows'][$memberId])) {
                $statistics['member_rows'][$memberId] = $member;
            }

            if ($memberId > 0 && $member['total_staff'] != $totalMale + $totalFemale) {
                $statistics['staff_levels_to_check'][$memberId] = $member;
                $statistics['staff_levels_to_check'][$memberId]['total_female'] = $totalFemale;
                $statistics['staff_levels_to_check'][$memberId]['total_male'] = $totalMale;
                $statistics['staff_levels_to_check'][$memberId]['total_staff'] = $member['total_staff'];
                // echo $member['id'] . ' - ' . $member['firm_name'] . ' - ' . $member['total_staff'] . ' : ' . $totalMale . ' : ' . $totalFemale . '<br />';
            }

            if (isset($member['ADecID']) && $member['ADecID'] > 0) {
                $statistics['total_captured'] += 1;
            }

            //            echo $member['TransProfMA'] . ' : ' . $member['trans_prof_ma'] . '<br />';
        } //foreach member

        $statistics['black_owned_turnover_data'] = [
            [
                'label' => 'Black Owned',
                'data' => [
                    $statistics['turnover']['black_owned']['EME1']['num'],
                    $statistics['turnover']['black_owned']['EME2']['num'],
                    $statistics['turnover']['black_owned']['QSE1']['num'],
                    $statistics['turnover']['black_owned']['QSE2']['num'],
                    $statistics['turnover']['black_owned']['QSE3']['num'],
                    $statistics['turnover']['black_owned']['QSE4']['num'],
                    $statistics['turnover']['black_owned']['GEN1']['num'],
                    $statistics['turnover']['black_owned']['GEN2']['num'],
                    $statistics['turnover']['black_owned']['GEN3']['num'],
                    $statistics['turnover']['black_owned']['GEN4']['num'],
                    $statistics['turnover']['black_owned']['GEN5']['num'],
                    $statistics['turnover']['black_owned']['GEN6']['num'],
                    $statistics['turnover']['black_owned']['GEN7']['num'],
                    $statistics['turnover']['black_owned']['GEN8']['num'],
                ]
            ],
            [
                'label' => 'Not Black Owned',
                'data' => [
                    $statistics['turnover']['not_black_owned']['EME1']['num'],
                    $statistics['turnover']['not_black_owned']['EME2']['num'],
                    $statistics['turnover']['not_black_owned']['QSE1']['num'],
                    $statistics['turnover']['not_black_owned']['QSE2']['num'],
                    $statistics['turnover']['not_black_owned']['QSE3']['num'],
                    $statistics['turnover']['not_black_owned']['QSE4']['num'],
                    $statistics['turnover']['not_black_owned']['GEN1']['num'],
                    $statistics['turnover']['not_black_owned']['GEN2']['num'],
                    $statistics['turnover']['not_black_owned']['GEN3']['num'],
                    $statistics['turnover']['not_black_owned']['GEN4']['num'],
                    $statistics['turnover']['not_black_owned']['GEN5']['num'],
                    $statistics['turnover']['not_black_owned']['GEN6']['num'],
                    $statistics['turnover']['not_black_owned']['GEN7']['num'],
                    $statistics['turnover']['not_black_owned']['GEN8']['num'],
                ]
            ]
        ];

        $statistics['black_owned_staff_data'] = [
            [
                'label' => 'Black Owned',
                'data' => [
                    $statistics['turnover']['black_owned']['EME1']['staff'],
                    $statistics['turnover']['black_owned']['EME2']['staff'],
                    $statistics['turnover']['black_owned']['QSE1']['staff'],
                    $statistics['turnover']['black_owned']['QSE2']['staff'],
                    $statistics['turnover']['black_owned']['QSE3']['staff'],
                    $statistics['turnover']['black_owned']['QSE4']['staff'],
                    $statistics['turnover']['black_owned']['GEN1']['staff'],
                    $statistics['turnover']['black_owned']['GEN2']['staff'],
                    $statistics['turnover']['black_owned']['GEN3']['staff'],
                    $statistics['turnover']['black_owned']['GEN4']['staff'],
                    $statistics['turnover']['black_owned']['GEN5']['staff'],
                    $statistics['turnover']['black_owned']['GEN6']['staff'],
                    $statistics['turnover']['black_owned']['GEN7']['staff'],
                    $statistics['turnover']['black_owned']['GEN8']['staff'],
                ]
            ],
            [
                'label' => 'Not Black Owned',
                'data' => [
                    $statistics['turnover']['not_black_owned']['EME1']['staff'],
                    $statistics['turnover']['not_black_owned']['EME2']['staff'],
                    $statistics['turnover']['not_black_owned']['QSE1']['staff'],
                    $statistics['turnover']['not_black_owned']['QSE2']['staff'],
                    $statistics['turnover']['not_black_owned']['QSE3']['staff'],
                    $statistics['turnover']['not_black_owned']['QSE4']['staff'],
                    $statistics['turnover']['not_black_owned']['GEN1']['staff'],
                    $statistics['turnover']['not_black_owned']['GEN2']['staff'],
                    $statistics['turnover']['not_black_owned']['GEN3']['staff'],
                    $statistics['turnover']['not_black_owned']['GEN4']['staff'],
                    $statistics['turnover']['not_black_owned']['GEN5']['staff'],
                    $statistics['turnover']['not_black_owned']['GEN6']['staff'],
                    $statistics['turnover']['not_black_owned']['GEN7']['staff'],
                    $statistics['turnover']['not_black_owned']['GEN8']['staff'],
                ]
            ]
        ];

        $statistics['bbbee_levels_data'] = [
            [
                'label' => 'Member Firms',
                'data' => [
                    $statistics['bbbeeLevels']['Level1'],
                    $statistics['bbbeeLevels']['Level2'],
                    $statistics['bbbeeLevels']['Level3'],
                    $statistics['bbbeeLevels']['Level4'],
                    $statistics['bbbeeLevels']['Level5'],
                    $statistics['bbbeeLevels']['Level6'],
                    $statistics['bbbeeLevels']['Level7'],
                    $statistics['bbbeeLevels']['Level8'],
                ]
            ]
        ];

        $staffLevels = ['tm', 'sm', 'pro', 'skilled', 'semi', 'unskill', 'temp'];

        foreach ($staffLevels as $staffLevel) {

            $statistics['staff_to_cat_data_' . $staffLevel] = [
                'labels' => [
                    'Male - African',
                    'Male - Coloured',
                    'Male - Indian',
                    'Male - White',
                    'Male - Foreign',
                    'Female - African',
                    'Female - Coloured',
                    'Female - Indian',
                    'Female - White',
                    'Female - Foreign',
                ],
                'datasets' => []
            ];

            foreach ($turnOverCategoriesArray as $toLevel => $countStaff) {
                $statistics['staff_to_cat_data_' . $staffLevel]['datasets'][] = [
                    'label' => $toLevel,
                    'data' => [
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['ma'],
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['mc'],
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['mi'],
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['mw'],
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['mf'],
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['fa'],
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['fc'],
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['fi'],
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['fw'],
                        $statistics['turnover']['overall'][$toLevel]['transformation'][$staffLevel]['ff'],
                    ],
                    'stack' => $toLevel,
                ];
            }
        }

        return $statistics;
    }

    /**
     * Save a Member Firm
     *
     * @return array
     */
    public function getTransformationStatistics()
    {

        $return = [];
        $transformationManager = $this->getContainer()->get('member_firm_transformation.manager');

        $return['members']['member_list'] = $this->em->getRepository(MemberFirm::class)->getList();

        foreach ($return['members']['member_list'] as $key => $member) {

            $memberFirm = $this->find($member['id']);

            if (is_object($memberFirm)) {
                //                echo $memberFirm->getId() . '<br />';

                $memberTransform = $transformationManager->findOneByArray(array('member_firm' => $memberFirm));

                //                var_dump(array_keys($memberTransform));
                //                exit;

                if (is_array($memberTransform) && count($memberTransform) > 0) {
                    $return['members']['member_list'][$key] = array_merge($return['members']['member_list'][$key], $memberTransform[0]);
                }
            }
        }

        // echo count($return['members']['member_list']) . '<br />';

        $return['members']['statistics'] = $this->processStats($return['members']['member_list']);

        $return = $this->getContainer()->get('adec_member_firm.manager')->getLists($return);

        return $return;
    }
}