Your IP : 216.73.217.79


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

<?php

namespace App\MemberBundle\Repository;

use App\MemberBundle\Entity\ADecMemberFirm;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Query\ResultSetMappingBuilder;
use Doctrine\Persistence\ManagerRegistry;

/**
 * @extends ServiceEntityRepository<ADecMemberFirm>
 *
 * @method ADecMemberFirm|null find($id, $lockMode = null, $lockVersion = null)
 * @method ADecMemberFirm|null findOneBy(array $criteria, array $orderBy = null)
 * @method ADecMemberFirm[]    findAll()
 * @method ADecMemberFirm[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class ADecMemberFirmRepository extends ServiceEntityRepository
{

    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, ADecMemberFirm::class);
    }

    public function findOneByLiveFirmAndDeclarationYear(int $liveFirmId, int $year): ?ADecMemberFirm
    {
        return $this->findOneBy([
            'prev_firm_id' => (string) $liveFirmId,
            'declaration_year' => $year,
        ]);
    }

    /**
     * Get the list of IDs
     * @return array
     */
    public function findAllIds()
    {
        return $this->createQueryBuilder('mf')
            ->select('mf.id')
            //                        ->where('ma.cancelled = 0 OR ma.cancelled IS NULL')
            //                        ->setMaxResults(100)
            ->getQuery()->getArrayResult()
        ;
    }

    /**
     * Get the list of IDs
     * @return array
     */
    public function getList($year = null)
    {

        if (!is_null($year) && $year != 'members') {

            $conn = $this->getEntityManager()->getConnection();

            $tableName = 'ADec_tblMemberFirms_' . $year;
            $transformationTableName = 'ADec_Transformation_' . $year;
            $doneTableName = 'ADec_Done_Local_' . $year;
            $whereClause = '';

            if ($year > 2023) {
                $tableName = 'ADec_tblMemberFirms';
                $transformationTableName = 'ADec_Transformation';
                $doneTableName = 'ADec_Done_Local';
                $whereClause = ' AND mf.DeclarationYear = ' . $year . ' AND (mt.DeclarationYear IS NULL OR mt.DeclarationYear = ' . $year . ') ';
            }

            if ($year <= 2016) {
                $transformationTableName = 'ADec_Transformation_2017';
            }

            $sql = "SELECT mf.*, mt.*, 
                    (SELECT MAX(ADecID) AS ADecID 
                        FROM " . $doneTableName . " dt 
                        WHERE dt.RefID = mf.FirmID 
                            AND dt.RefType = 'FirmID' 
                            AND dt.RefDoc = 'UPDATED' 
                            AND YEAR(dt.ADecDate) = " . $year . ") AS ADecID,
                    (SELECT BlackWomenOwned 
                        FROM `ADec_tblMemberFirms` mf2 
                        WHERE mf2.DeclarationYear = $year 
                            AND mf2.Prev_FirmID = mf.Prev_FirmID) AS BlackWomenOwnedVal  
                FROM " . $tableName . " mf 
                    LEFT OUTER JOIN " . $transformationTableName . " mt ON mf.FirmID = mt.FirmID 
                    WHERE mf.MemberStatus IN ('Member', 'RETIRED') "
                . $whereClause
                . " ORDER BY mf.FirmName ASC";
            // echo $sql . '<br /><br />';

            $resultSet = $conn->executeQuery($sql);

            return $resultSet->fetchAllAssociative();
        } else {
            return $this->createQueryBuilder('mf')->where('mf.member_status IN (:memberStatus)')->setParameter('memberStatus', ['Member'])->getQuery()->getArrayResult();
        }
        //        else {
        //
        //            $conn = $this->getEntityManager()->getConnection();
        //
        //            $sql = "SELECT * FROM adec_tblmemberfirms WHERE Prev_FirmID IN (SELECT FirmID FROM tblmemberfirms WHERE memberstatus IN ('Member'))";
        //
        //            $resultSet = $conn->executeQuery($sql);
        //
        //            return $resultSet->fetchAllAssociative();
        //        }
    }

    /**
     * Insert firms from tblMemberFirms into ADec_tblMemberFirms for a given year
     * @param int $year
     * @return int Number of rows inserted
     */
    public function insertFirmsForYear($year = 2025)
    {
        $conn = $this->getEntityManager()->getConnection();

        $sql = "INSERT INTO `ADec_tblMemberFirms` (
            `Prev_FirmID`,
            `FirmName`,
            `FormOfIncorporation`,
            `DateJoined`,
            `DateTerminated`,
            `DirectoryLastUpdate`,
            `EntryType`,
            `PageRef`,
            `LogoReceived`,
            `Photographs`,
            `EntryText`,
            `RunOns`,
            `OrderNumber`,
            `InvoiceNumber`,
            `PaymentReceived`,
            `DeclarationReceived`,
            `MemberStatus`,
            `Acoustics`,
            `Agricultural`,
            `BuildingServices`,
            `Chemical`,
            `Civil`,
            `Development`,
            `Electrical`,
            `Electronic`,
            `Environmental`,
            `Geotechnical`,
            `Industrial`,
            `Mechanical`,
            `Marine`,
            `Mining`,
            `Process`,
            `Structural`,
            `Transportation`,
            `Architecture`,
            `RuralDevelopment`,
            `ProjectManagement`,
            `QuantitySurveying`,
            `TownPlanning`,
            `Multidisciplinary`,
            `DisputeResolution`,
            `ExpertWitness`,
            `InformationSystems`,
            `FacilitiesManagement`,
            `GIS`,
            `PIUnderwriter`,
            `LevelOfCover`,
            `LevelOfCoverShort`,
            `Quality Management`,
            `Date of last peer review`,
            `URL`,
            `DocumentAccess`,
            `QualityMxSystem`,
            `ExportDivision`,
            `Active`,
            `School`,
            `LNumber`,
            `ExistingOrExperience`,
            `SeekingToExportTo`,
            `QMSPlan`,
            `QMSDocs`,
            `QMSISOComply`,
            `QMSISOCert`,
            `QMSISOCertDate`,
            `QMSOffices`,
            `QMSConsult`,
            `QMSCertBody`,
            `AcousticsName`,
            `AgriculturalName`,
            `BuildingServicesName`,
            `ChemicalName`,
            `CivilName`,
            `DevelopmentName`,
            `ElectricalName`,
            `ElectronicName`,
            `EnvironmentalName`,
            `GeotechnicalName`,
            `IndustrialName`,
            `MechanicalName`,
            `MarineName`,
            `MiningName`,
            `ProcessName`,
            `StructuralName`,
            `TransportationName`,
            `ArchitectureName`,
            `RuralDevelopmentName`,
            `ProjectManagementName`,
            `QuantitySurveyingName`,
            `TownPlanningName`,
            `MultidisciplinaryName`,
            `DisputeResolutionName`,
            `ExpertWitnessName`,
            `InformationSystemsName`,
            `FacilitiesManagementName`,
            `GISName`,
            `MainFirmInvoice`,
            `GroupFirmsInvoice`,
            `QMSImplemented`,
            `QMSImplFully`,
            `QMSImplPart`,
            `QMSAssess`,
            `QMSUseConsult`,
            `QMSIntend`,
            `MentoringProg`,
            `CandidateProg`,
            `SubscriptionsContact`,
            `SubscriptionsEmail`,
            `HRTrainingContact`,
            `HRTrainingEmail`,
            `MarketingContact`,
            `MarketingEmail`,
            `GoToPersonName`,
            `GoToPersonTel`,
            `GoToPersonEmail`,
            `CAUSigned`,
            `BBBEE`,
            `YPFContact`,
            `YPFEmail`,
            `SMME`,
            `BlackOwned`,
            `BBBEELevel`,
            `SustainabilityPolicy`,
            `SustainabilityIssues`,
            `SustainabilityProcess`,
            `SustainabilityChampion`,
            `SustainabilityChampName`,
            `SustainabilityFramework`,
            `SustainabilityDiscussed`,
            `SustainabilityIndicator1`,
            `SustainabilityIndicator2`,
            `SustainabilityIndicator3`,
            `SustainabilityIndicator4`,
            `SustainabilityIndicator5`,
            `QMIG`,
            `QMSChampion`,
            `QMSChampName`,
            `QMSChampEmail`,
            `SustainabilityChampEmail`,
            `ProcurementContact`,
            `ProcurementEmail`,
            `SubscriptionsTel`,
            `HRTrainingTel`,
            `MarketingTel`,
            `ProcurementTel`,
            `YPFContactTel`,
            `BlackWomenOwned`,
            `WomenOwned`,
            `SABTACO`,
            `BBCBE`,
            `GBCSA`,
            `TotalStaff`,
            `ImmigratedStaff`,
            `ManualCaptured`,
            `DeclarationYear`
        )
        SELECT 
            f.FirmID AS Prev_FirmID,
            f.FirmName,
            f.FormOfIncorporation,
            f.DateJoined,
            f.DateTerminated,
            f.DirectoryLastUpdate,
            f.EntryType,
            f.PageRef,
            f.LogoReceived,
            f.Photographs,
            NULL AS EntryText,
            f.RunOns,
            f.OrderNumber,
            f.InvoiceNumber,
            f.PaymentReceived,
            f.DeclarationReceived,
            f.MemberStatus,
            f.Acoustics,
            f.Agricultural,
            f.BuildingServices,
            f.Chemical,
            f.Civil,
            f.Development,
            f.Electrical,
            f.Electronic,
            f.Environmental,
            f.Geotechnical,
            f.Industrial,
            f.Mechanical,
            f.Marine,
            f.Mining,
            f.Process,
            f.Structural,
            f.Transportation,
            f.Architecture,
            f.RuralDevelopment,
            f.ProjectManagement,
            f.QuantitySurveying,
            f.TownPlanning,
            f.Multidisciplinary,
            f.DisputeResolution,
            f.ExpertWitness,
            f.InformationSystems,
            f.FacilitiesManagement,
            f.GIS,
            f.PIUnderwriter,
            f.LevelOfCover,
            f.LevelOfCoverShort,
            f.`Quality Management`,
            f.`Date of last peer review`,
            f.URL,
            f.DocumentAccess,
            f.QualityMxSystem,
            f.ExportDivision,
            f.Active,
            f.School,
            f.LNumber,
            f.ExistingOrExperience,
            f.SeekingToExportTo,
            f.QMSPlan,
            f.QMSDocs,
            f.QMSISOComply,
            f.QMSISOCert,
            f.QMSISOCertDate,
            f.QMSOffices,
            f.QMSConsult,
            f.QMSCertBody,
            f.AcousticsName,
            f.AgriculturalName,
            f.BuildingServicesName,
            f.ChemicalName,
            f.CivilName,
            f.DevelopmentName,
            f.ElectricalName,
            f.ElectronicName,
            f.EnvironmentalName,
            f.GeotechnicalName,
            f.IndustrialName,
            f.MechanicalName,
            f.MarineName,
            f.MiningName,
            f.ProcessName,
            f.StructuralName,
            f.TransportationName,
            f.ArchitectureName,
            f.RuralDevelopmentName,
            f.ProjectManagementName,
            f.QuantitySurveyingName,
            f.TownPlanningName,
            f.MultidisciplinaryName,
            f.DisputeResolutionName,
            f.ExpertWitnessName,
            f.InformationSystemsName,
            f.FacilitiesManagementName,
            f.GISName,
            f.MainFirmInvoice,
            f.GroupFirmsInvoice,
            f.QMSImplemented,
            f.QMSImplFully,
            f.QMSImplPart,
            f.QMSAssess,
            f.QMSUseConsult,
            f.QMSIntend,
            f.MentoringProg,
            f.CandidateProg,
            f.SubscriptionsContact,
            f.SubscriptionsEmail,
            f.HRTrainingContact,
            f.HRTrainingEmail,
            f.MarketingContact,
            f.MarketingEmail,
            f.GoToPersonName,
            f.GoToPersonTel,
            f.GoToPersonEmail,
            f.CaUSigned,
            f.BBBEE,
            f.YPFContact,
            f.YPFEmail,
            f.SMME,
            f.BlackOwned,
            f.BBBEELevel,
            f.SustainabilityPolicy,
            f.SustainabilityIssues,
            f.SustainabilityProcess,
            f.SustainabilityChampion,
            f.SustainabilityChampName,
            f.SustainabilityFramework,
            f.SustainabilityDiscussed,
            f.SustainabilityIndicator1,
            f.SustainabilityIndicator2,
            f.SustainabilityIndicator3,
            f.SustainabilityIndicator4,
            f.SustainabilityIndicator5,
            f.QMIG,
            f.QMSChampion,
            f.QMSChampName,
            f.QMSChampEmail,
            f.SustainabilityChampEmail,
            f.ProcurementContact,
            f.ProcurementEmail,
            f.SubscriptionsTel,
            f.HRTrainingTel,
            f.MarketingTel,
            f.ProcurementTel,
            f.YPFContactTel,
            f.BlackWomenOwned,
            f.WomenOwned,
            f.SABTACO,
            f.BBCBE,
            f.GBCSA,
            f.TotalStaff,
            NULL AS ImmigratedStaff,
            1 AS ManualCaptured,
            " . intval($year) . " AS DeclarationYear
        FROM `tblMemberFirms` f
        WHERE 1 = 1
            AND f.FirmID NOT IN (
                SELECT mf.Prev_FirmID 
                FROM ADec_tblMemberFirms mf 
                WHERE mf.DeclarationYear = " . intval($year) . " 
                AND mf.Prev_FirmID IS NOT NULL
            ) 
            AND f.MemberStatus IN ('Member', 'RETIRED')
            AND YEAR(f.DeclarationReceived) = " . intval($year);

        echo $sql . '<br />';
        exit;

        $result = $conn->executeStatement($sql);
        return $result;
    }

    /**
     * Insert transformation data from tblMemberFirmsTransformation into ADec_Transformation
     * @return int Number of rows inserted
     */
    public function insertTransformationData()
    {
        $conn = $this->getEntityManager()->getConnection();

        $sql = "INSERT INTO `ADec_Transformation` (
            `TransformID`,
            `FirmID`,
            `Prev_FirmID`,
            `TransTopMA`,
            `TransTopMC`,
            `TransTopMI`,
            `TransTopMW`,
            `TransTopFA`,
            `TransTopFC`,
            `TransTopFI`,
            `TransTopFW`,
            `TransTopMN`,
            `TransTopFN`,
            `TransSeniorMA`,
            `TransSeniorMC`,
            `TransSeniorMI`,
            `TransSeniorMW`,
            `TransSeniorFA`,
            `TransSeniorFC`,
            `TransSeniorFI`,
            `TransSeniorFW`,
            `TransSeniorMN`,
            `TransSeniorFN`,
            `TransProfMA`,
            `TransProfMC`,
            `TransProfMI`,
            `TransProfMW`,
            `TransProfFA`,
            `TransProfFC`,
            `TransProfFI`,
            `TransProfFW`,
            `TransProfMN`,
            `TransProfFN`,
            `TransSkilledMA`,
            `TransSkilledMC`,
            `TransSkilledMI`,
            `TransSkilledMW`,
            `TransSkilledFA`,
            `TransSkilledFC`,
            `TransSkilledFI`,
            `TransSkilledFW`,
            `TransSkilledMN`,
            `TransSkilledFN`,
            `TransSemiMA`,
            `TransSemiMC`,
            `TransSemiMI`,
            `TransSemiMW`,
            `TransSemiFA`,
            `TransSemiFC`,
            `TransSemiFI`,
            `TransSemiFW`,
            `TransSemiMN`,
            `TransSemiFN`,
            `TransUnskillMA`,
            `TransUnskillMC`,
            `TransUnskillMI`,
            `TransUnskillMW`,
            `TransUnskillFA`,
            `TransUnskillFC`,
            `TransUnskillFI`,
            `TransUnskillFW`,
            `TransUnskillMN`,
            `TransUnskillFN`,
            `TransTempMA`,
            `TransTempMC`,
            `TransTempMI`,
            `TransTempMW`,
            `TransTempFA`,
            `TransTempFC`,
            `TransTempFI`,
            `TransTempFW`,
            `TransTempMN`,
            `TransTempFN`,
            `ThreeYearsAverageTurnover`,
            `DeclarationYear`
        )
        SELECT 
            t.TransformID,
            mf.FirmID,
            t.FirmID AS Prev_FirmID,
            t.TransTopMA,
            t.TransTopMC,
            t.TransTopMI,
            t.TransTopMW,
            t.TransTopFA,
            t.TransTopFC,
            t.TransTopFI,
            t.TransTopFW,
            t.TransTopMN,
            t.TransTopFN,
            t.TransSeniorMA,
            t.TransSeniorMC,
            t.TransSeniorMI,
            t.TransSeniorMW,
            t.TransSeniorFA,
            t.TransSeniorFC,
            t.TransSeniorFI,
            t.TransSeniorFW,
            t.TransSeniorMN,
            t.TransSeniorFN,
            t.TransProfMA,
            t.TransProfMC,
            t.TransProfMI,
            t.TransProfMW,
            t.TransProfFA,
            t.TransProfFC,
            t.TransProfFI,
            t.TransProfFW,
            t.TransProfMN,
            t.TransProfFN,
            t.TransSkilledMA,
            t.TransSkilledMC,
            t.TransSkilledMI,
            t.TransSkilledMW,
            t.TransSkilledFA,
            t.TransSkilledFC,
            t.TransSkilledFI,
            t.TransSkilledFW,
            t.TransSkilledMN,
            t.TransSkilledFN,
            t.TransSemiMA,
            t.TransSemiMC,
            t.TransSemiMI,
            t.TransSemiMW,
            t.TransSemiFA,
            t.TransSemiFC,
            t.TransSemiFI,
            t.TransSemiFW,
            t.TransSemiMN,
            t.TransSemiFN,
            t.TransUnskillMA,
            t.TransUnskillMC,
            t.TransUnskillMI,
            t.TransUnskillMW,
            t.TransUnskillFA,
            t.TransUnskillFC,
            t.TransUnskillFI,
            t.TransUnskillFW,
            t.TransUnskillMN,
            t.TransUnskillFN,
            t.TransTempMA,
            t.TransTempMC,
            t.TransTempMI,
            t.TransTempMW,
            t.TransTempFA,
            t.TransTempFC,
            t.TransTempFI,
            t.TransTempFW,
            t.TransTempMN,
            t.TransTempFN,
            f.ThreeYearsAverageTurnover,
            mf.DeclarationYear
        FROM `tblMemberFirmsTransformation` t
        INNER JOIN `ADec_tblMemberFirms` mf ON t.FirmID = mf.Prev_FirmID 
        INNER JOIN `tblMemberFirms` f ON t.FirmID = f.FirmID
        WHERE mf.ManualCaptured = 1";

        echo $sql . '<br />';
        exit;

        $result = $conn->executeStatement($sql);
        return $result;
    }

    //    /**
    //     * @return MemberFirm[] Returns an array of MemberFirm objects
    //     */
    //    public function findByExampleField($value): array
    //    {
    //        return $this->createQueryBuilder('m')
    //            ->andWhere('m.exampleField = :val')
    //            ->setParameter('val', $value)
    //            ->orderBy('m.id', 'ASC')
    //            ->setMaxResults(10)
    //            ->getQuery()
    //            ->getResult()
    //        ;
    //    }
    //    public function findOneBySomeField($value): ?MemberFirm
    //    {
    //        return $this->createQueryBuilder('m')
    //            ->andWhere('m.exampleField = :val')
    //            ->setParameter('val', $value)
    //            ->getQuery()
    //            ->getOneOrNullResult()
    //        ;
    //    }
}