Commit 70d535a0 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Merge branch '2025-08-inclure-frais-gestion' into kusanagi

parents 04f1b6c6 dc3d3e88
Loading
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -445,6 +445,11 @@ class AdministrationController extends AbstractOscarController implements
                    $this->getOscarConfigurationService()->setNumerotationEditable($value);
                    return $this->redirect()->toRoute('administration/parameters');

                case OscarConfigurationService::frais_de_gestion_inclus:
                    $value = $this->params()->fromPost('parameter_value') == "on";
                    $this->getOscarConfigurationService()->setFraisDeGestionInclus($value);
                    return $this->redirect()->toRoute('administration/parameters');

                case OscarConfigurationService::theme:
                    $value = $this->params()->fromPost('parameter_value', '');
                    $this->getOscarConfigurationService()->setTheme($value);
@@ -535,6 +540,7 @@ class AdministrationController extends AbstractOscarController implements
            'timesheet_preview' => $this->getOscarConfigurationService()->getTimesheetPreview(),
            'timesheet_excel' => $this->getOscarConfigurationService()->getTimesheetExcel(),
            'allow_numerotation_custom' => $this->getOscarConfigurationService()->getNumerotationEditable(),
            'frais_de_gestion_inclus' => $this->getOscarConfigurationService()->getFraisDeGestionInclus(),
            'themes' => $this->getOscarConfigurationService()->getConfiguration('themes'),
            'theme' => $this->getOscarConfigurationService()->getTheme(),
            'export' => [
+1 −0
Original line number Diff line number Diff line
@@ -2254,6 +2254,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
            'pcruEnabled' => $this->getOscarConfigurationService()->getPcruEnabled(),

            'entity' => $activity,
            'fraisDeGestionInclus' => $this->getOscarConfigurationService()->getFraisDeGestionInclus(),

            'currencies' => $currencies,

+120 −108
Original line number Diff line number Diff line
@@ -684,9 +684,9 @@ class Activity implements ResourceInterface
        return $this->fraisDeGestion;
    }

    public function getFraisDeGestionDisplay(bool $diplayCurrency = true, bool $displayPercentInfo = true)
    public function getFraisDeGestionDisplay(bool $diplayCurrency = true, bool $displayPercentInfo = true, bool $fraisDeGestionInclusDansMontant = false)
    {
        return $this->getFraisDisplay($this->getFraisDeGestion(), $diplayCurrency, $displayPercentInfo);
        return $this->getFraisDisplay($this->getFraisDeGestion(), $diplayCurrency, $displayPercentInfo, $fraisDeGestionInclusDansMontant);
    }

    /**
@@ -770,8 +770,7 @@ class Activity implements ResourceInterface
        \DateTime $cache_at = new \DateTime(),
        bool $cache_lock = false,
        string $cache_lock_reason = self::CACHE_REASON_DEFAULT
    ): self
    {
    ): self {
        $this->cache = $cache_content;
        $this->dateCached = $cache_at;
        if ($cache_lock === true) {
@@ -815,9 +814,9 @@ class Activity implements ResourceInterface
    protected function getFraisDisplay(
        ?string $value,
        bool $diplayCurrency = true,
        bool    $displayPercentInfo = true
    ): string
    {
        bool $displayPercentInfo = true,
        bool $fraisDeGestionInclusDansMontant = false,
    ): string {
        $percent = '';
        $currency = '';
        $data = '';
@@ -831,7 +830,22 @@ class Activity implements ResourceInterface
                if ($displayPercentInfo) {
                    $percent = sprintf(' (%s)', $value);
                }
                $data = $this->getAmount() / 100 * floatval($value);
                $montantDeBaseSansLesFraisDeGestionPourLeCalculDesPourcentages = $this->getAmount();

                if ($fraisDeGestionInclusDansMontant) {
                    $fraisDeGestion = $this->getFraisDeGestion();
                    if (is_string($fraisDeGestion)) {
                        if (strpos($fraisDeGestion, '%')) {
                            $fraisDeGestion = $this->getAmount() / (floatval(100) + floatval($fraisDeGestion)) * floatval($fraisDeGestion);
                        } else {
                            $fraisDeGestion = floatval($fraisDeGestion);
                        }
                    } else {
                        $fraisDeGestion = floatval(0);
                    }
                    $montantDeBaseSansLesFraisDeGestionPourLeCalculDesPourcentages -= $fraisDeGestion;
                }
                $data = $montantDeBaseSansLesFraisDeGestionPourLeCalculDesPourcentages / floatval(100) * floatval($value);
            } else {
                $data = floatval($value);
            }
@@ -844,23 +858,23 @@ class Activity implements ResourceInterface
        return $out . $currency . $percent;
    }

    public function getFraisDeGestionPartUniteDisplay(bool $diplayCurrency = true, bool $displayPercentInfo = true)
    public function getFraisDeGestionPartUniteDisplay(bool $diplayCurrency = true, bool $displayPercentInfo = true, bool $fraisDeGestionInclusDansMontant = false)
    {
        return $this->getFraisDisplay($this->getFraisDeGestionPartUnite());
        return $this->getFraisDisplay($this->getFraisDeGestionPartUnite(), true, true, $fraisDeGestionInclusDansMontant);
    }


    public function getFraisDeGestionPartHebergeurDisplay(bool $diplayCurrency = true, bool $displayPercentInfo = true)
    public function getFraisDeGestionPartHebergeurDisplay(bool $diplayCurrency = true, bool $displayPercentInfo = true, bool $fraisDeGestionInclusDansMontant = false)
    {
        return $this->getFraisDisplay($this->getFraisDeGestionPartHebergeur());
        return $this->getFraisDisplay($this->getFraisDeGestionPartHebergeur(), true, true, $fraisDeGestionInclusDansMontant);
    }

    public function getFraisDeGestionPartGestionnaireDisplay(
        bool $diplayCurrency = true,
        bool $displayPercentInfo = true
    )
    {
        return $this->getFraisDisplay($this->getFraisDeGestionPartGestionnaire());
        bool $displayPercentInfo = true,
        bool $fraisDeGestionInclusDansMontant = false
    ) {
        return $this->getFraisDisplay($this->getFraisDeGestionPartGestionnaire(), true, true, $fraisDeGestionInclusDansMontant);
    }

    /**
@@ -1170,8 +1184,7 @@ class Activity implements ResourceInterface

    public function getActivityTypeChain(
        ActivityTypeService $activityTypeService
    )
    {
    ) {
        return $activityTypeService->getActivityTypeChain($this->getActivityType());
    }

@@ -1347,7 +1360,8 @@ class Activity implements ResourceInterface
    {
        if ($this->getDateNegociation()) {
            return $this->getDateNegociation()->format($format);
        } else {
        }
        else {
            return "";
        }
    }
@@ -1830,8 +1844,7 @@ class Activity implements ResourceInterface
        $role,
        $start = null,
        $to = null
    )
    {
    ) {
        if (!$this->hasOrganization($organization, $role)) {
            $partner = new ActivityOrganization();
            $partner->setOrganization($organization)
@@ -2078,8 +2091,7 @@ class Activity implements ResourceInterface
        ?\DateTime $dateStart = null,
        ?\DateTime $dateEnd = null,
        bool $deep = true
    )
    {
    ) {
        $found = false;
        /** @var ActivityPerson $activityPerson */
        foreach ($this->persons as $activityPerson) {
@@ -2401,7 +2413,8 @@ class Activity implements ResourceInterface
        /** @var ActivityPayment $payment */
        foreach ($this->getPayments() as $payment) {
            if (
                $payment->getDatePayment() == $datePayment && $payment->getAmount() == $amount && $payment->getDatePredicted() == $datePredicted
                $payment->getDatePayment() == $datePayment && $payment->getAmount(
                ) == $amount && $payment->getDatePredicted() == $datePredicted
            ) {
                return true;
            }
@@ -2420,8 +2433,7 @@ class Activity implements ResourceInterface
        Organization $organization,
        $role = null,
        $deep = true
    )
    {
    ) {
        $found = false;
        /** @var ActivityOrganization $relation */
        foreach ($this->organizations as $relation) {
@@ -2729,7 +2741,7 @@ class Activity implements ResourceInterface
        return $datas;
    }

    public function csv($dateFormat = 'Y-m-d', $activityTypeChainFormatted)
    public function csv($dateFormat = 'Y-m-d', $activityTypeChainFormatted, bool $fraisDeGestionInclusDansMontant = false)
    {
        return array(
            'ID'                                   => $this->getId(),
@@ -2765,10 +2777,10 @@ class Activity implements ResourceInterface
            'versement prévu'                      => number_format($this->getTotalPaymentProvided(), 2, ',', ''),
            'écart de paiement'                    => number_format($this->getEcartPaiement(), 2, ',', ''),
            'justificatif écart de paiement'       => $this->getJustificatifEcartPaiement(),
            'Frais de gestion' => $this->getFraisDeGestionDisplay(),
            'Frais de gestion (part hébergeur)' => $this->getFraisDeGestionPartHebergeurDisplay(true, false),
            'Frais de gestion (part unité)' => $this->getFraisDeGestionPartUniteDisplay(true, false),
            'Frais de gestion (part gestionnaire)' => $this->getFraisDeGestionPartGestionnaireDisplay(true, false),
            'Frais de gestion'                     => $this->getFraisDeGestionDisplay(true, true, $fraisDeGestionInclusDansMontant),
            'Frais de gestion (part hébergeur)'    => $this->getFraisDeGestionPartHebergeurDisplay(true, false, $fraisDeGestionInclusDansMontant),
            'Frais de gestion (part unité)'        => $this->getFraisDeGestionPartUniteDisplay(true, false, $fraisDeGestionInclusDansMontant),
            'Frais de gestion (part gestionnaire)' => $this->getFraisDeGestionPartGestionnaireDisplay(true, false, $fraisDeGestionInclusDansMontant),
            'incidence financière'                 => $this->getIncidenceFinanciere(),
            'Assiette subventionnable'             => $this->getAssietteSubventionnable(),
            'Note'                                 => $this->getNoteFinanciere(),
+12 −1
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ class OscarConfigurationService implements ServiceLocatorAwareInterface
    const financial_description = 'financial_description';
    const spent_effective_clause = 'spent_effective_clause';
    const spent_predicted_clause = 'spent_predicted_clause';
    const frais_de_gestion_inclus = 'frais_de_gestion_inclus';

    const ORGANIZATION_REQUIRED = 'organization_required';

@@ -357,6 +358,16 @@ class OscarConfigurationService implements ServiceLocatorAwareInterface
        $this->saveEditableConfKey(self::allow_numerotation_custom, $boolean);
    }

    public function getFraisDeGestionInclus()
    {
        return $this->getEditableConfKey(self::frais_de_gestion_inclus, false);
    }

    public function setFraisDeGestionInclus($boolean)
    {
        $this->saveEditableConfKey(self::frais_de_gestion_inclus, $boolean);
    }

    public function getValidationPFI()
    {
        $reg = $this->getEditableConfKey(self::pfi_strict_format);
+4 −4
Original line number Diff line number Diff line
@@ -600,10 +600,10 @@ class ProjectGrantApiService implements
            'amount' => $activity->getAmount(),
            'montant' => $activity->getAmount(),
            'currency' => $activity->getCurrency() ? $activity->getCurrency()->toJson() : null,
            'fraisDeGestion' => $activity->getFraisDeGestionDisplay(),
            'fraisDeGestionPartHebergeur' => $activity->getFraisDeGestionPartHebergeurDisplay(),
            'fraisDeGestionPartUnite' => $activity->getFraisDeGestionPartUniteDisplay(),
            'fraisDeGestionPartGestionnaire' => $activity->getFraisDeGestionPartGestionnaireDisplay(),
            'fraisDeGestion' => $activity->getFraisDeGestionDisplay(true, true, $this->getOscarConfigurationService()->getFraisDeGestionInclus()),
            'fraisDeGestionPartHebergeur' => $activity->getFraisDeGestionPartHebergeurDisplay(true, true, $this->getOscarConfigurationService()->getFraisDeGestionInclus()),
            'fraisDeGestionPartUnite' => $activity->getFraisDeGestionPartUniteDisplay(true, true, $this->getOscarConfigurationService()->getFraisDeGestionInclus()),
            'fraisDeGestionPartGestionnaire' => $activity->getFraisDeGestionPartGestionnaireDisplay(true, true, $this->getOscarConfigurationService()->getFraisDeGestionInclus()),
            'tva' => (string)$activity->getTva(),
            'assietteSubventionnable' => $activity->getAssietteSubventionnable(),
        ];
Loading