Commit b293d92f authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Ajout des périodes de validité des Lots de travail en cours (ViteJS)

parent f5af5797
Loading
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ use Symfony\Component\Yaml\Parser;
use UnicaenAuth\Service\UserContext;
use Zend\Http\Request;
use Zend\Http\Response;
use Zend\Json\Server\Request\Http;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\Session\Container;
use Zend\View\Model\JsonModel;
@@ -60,6 +61,59 @@ class AbstractOscarController extends AbstractActionController implements UseOsc
{
    use UseOscarConfigurationServiceTrait, UseOscarUserContextServiceTrait, UseLoggerServiceTrait, UseEntityManagerTrait, UseActivityLogServiceTrait;

    public function getPutData()
    {
        $lines = file("php://input");
        $re = '/Content-Disposition: form-data; name="(\w*)"/m';

        $PUT = [];
        $currentName = null;
        $currentData = [];
        $separator = null;
        $needSkip = true;

        foreach($lines as $num => $line){
            $this->getLoggerService()->info("[put process] ... line : '$line'");

            if( $separator === null ){
                $separator = trim($line);
                $this->getLoggerService()->info("[put process] init $line");
                continue;
            }
/*
-----------------------------243741794428186209781894714397
-----------------------------243741794428186209781894714397--
 */

            if(str_contains($line, $separator)){
                $this->getLoggerService()->info("[put process] set '$currentName' = ...");
                $PUT[$currentName] = implode("\n\r", $currentData);
                $currentName = null;
                $currentData = [];
                continue;
            }

            if( preg_match_all($re, $line, $matches, PREG_SET_ORDER, 0) ){
                $currentName = $matches[0][1];
                $this->getLoggerService()->info("[put process] $currentName detected");
                $needSkip = true;
                continue;
            }

            if( $needSkip ){
                $this->getLoggerService()->info("[put process] SKIP");
                $needSkip = false;
                continue;
            }
            $this->getLoggerService()->info("[put process] ADD LINE");
            $currentData[] = $line;

        }



        return $PUT;
    }

    /**
     * Retourne le format de la requête sous la forme d'une chaîne.
+160 −107
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ use Oscar\Entity\WorkPackage;
use Oscar\Entity\WorkPackagePerson;
use Oscar\Exception\OscarException;
use Oscar\Form\WorkPackageForm;
use Oscar\Formatter\ActivityToJsonFormatter;
use Oscar\Hydrator\WorkPackageHydrator;
use Oscar\Provider\Privileges;
use Zend\Http\Response;
@@ -36,8 +37,8 @@ class WorkPackageController extends AbstractOscarController
    /**
     *
     */
    public function restAction(){

    public function restAction()
    {
//        try {
//            $this->getOscarUserContextService()->checkToken();
//        } catch( \Exception $e ){
@@ -66,7 +67,10 @@ class WorkPackageController extends AbstractOscarController
        // Mise à jour d'un déclarant

        if ($method == 'POST') {
            if( !$this->getOscarUserContextService()->hasPrivileges(Privileges::ACTIVITY_WORKPACKAGE_MANAGE, $activity) ){
            if (!$this->getOscarUserContextService()->hasPrivileges(
                Privileges::ACTIVITY_WORKPACKAGE_MANAGE,
                $activity
            )) {
                return $this->getResponseBadRequest("'Vous n'avez pas le droit de faire ça");
            }

@@ -83,7 +87,9 @@ class WorkPackageController extends AbstractOscarController
                }

                /** @var WorkPackage $workpackage */
                $workpackage = $this->getEntityManager()->getRepository(WorkPackage::class)->find($datas['workpackageid']);
                $workpackage = $this->getEntityManager()->getRepository(WorkPackage::class)->find(
                    $datas['workpackageid']
                );
                if (!$workpackage) {
                    return $this->getResponseBadRequest('Lot de travail introuvable.');
                }
@@ -96,10 +102,12 @@ class WorkPackageController extends AbstractOscarController
                } catch (\Exception $e) {
                    return $this->getResponseInternalError('Impossible de modifier le lot de travail.');
                }
            }
            else if (array_key_exists('workpackagepersonid', $datas)) {
            } else {
                if (array_key_exists('workpackagepersonid', $datas)) {
                    // Enregistrement de la durée
                $workpackageperson = $this->getEntityManager()->getRepository(WorkPackagePerson::class)->find($datas['workpackagepersonid']);
                    $workpackageperson = $this->getEntityManager()->getRepository(WorkPackagePerson::class)->find(
                        $datas['workpackagepersonid']
                    );
                    if (!$workpackageperson) {
                        return $this->getResponseBadRequest('Déclarant introuvable.');
                    }
@@ -110,24 +118,22 @@ class WorkPackageController extends AbstractOscarController
                    } catch (\Exception $e) {
                        return $this->getResponseInternalError('Impossible de supprimer le déclarant.');
                    }
            }
            else {
                } else {
                    return $this->getResponseBadRequest('Données incorrecte');
                }
            }

            return $this->getResponseBadRequest('Données incorrecte');
        }

        ///////////////////////////////////: AJOUT d'un déclarant
        if ($method == 'PUT') {
            $data = $this->getRequest()->getPost();

//            parse_str(file_get_contents('php://input'), $_PUT);
//
//            $this->>$this->getLoggerService()->info(print_r($_PUT, true));
            $data = $this->getPutData();
            $this->getLoggerService()->info("[PUT] Ajout d'un lot de travail : " . print_r($data, true));

            if( $data['workpackageid'] == -1) {
            if ($data['workpackageid'] == -1 || !$data['workpackageid']) {
                $code = trim($data['code']);
                $this->getLoggerService()->info("Ajout d'un lot de travail '$code' dans '$activity'");
                try {
                    // On contrôle les code vide
                    if ($code == '') {
@@ -142,15 +148,16 @@ class WorkPackageController extends AbstractOscarController
                    $this->getEntityManager()->flush();
                    return $this->getResponseOk();
                } catch (\Exception $e) {
                    return $this->getResponseInternalError('Impossible de créer le lot de travail.');
                    return $this->getResponseInternalError('Impossible de créer le lot de travail .' . $e->getMessage());
                }
            } else {
                $this->getLoggerService()->info(print_r($data['workpackageid'], true));

            }

            try {
                $workpackage = $this->getEntityManager()->getRepository(WorkPackage::class)->find($data['idworkpackage']);
                $workpackage = $this->getEntityManager()->getRepository(WorkPackage::class)->find(
                    $data['workpackageid']
                );
                if (!$workpackage) {
                    return $this->getResponseBadRequest("Le lot de travail est introuvable.");
                }
@@ -159,12 +166,14 @@ class WorkPackageController extends AbstractOscarController
            }

            try {
                $this->getLoggerService()->info("AJOUT PERSON>WORKPACKAGE");
                $this->getLoggerService()->info(print_r($data, true));
                $person = $this->getEntityManager()->getRepository(Person::class)->find($data['idperson']);
                if (!$person) {
                    return $this->getResponseBadRequest("Cette personne est introuvable.");
                }
            } catch (\Exception $e) {
                return $this->getResponseBadRequest("Cette personne est introuvable.");
                return $this->getResponseBadRequest("Impossible d'ajouter la personne au lot de travail : " . $e->getMessage());
            }

            $declarant = $this->getEntityManager()->getRepository(WorkPackagePerson::class)->findBy([
@@ -190,8 +199,10 @@ class WorkPackageController extends AbstractOscarController
        }

        if ($method == 'DELETE') {

            if( !$this->getOscarUserContextService()->hasPrivileges(Privileges::ACTIVITY_WORKPACKAGE_MANAGE, $activity) ){
            if (!$this->getOscarUserContextService()->hasPrivileges(
                Privileges::ACTIVITY_WORKPACKAGE_MANAGE,
                $activity
            )) {
                return $this->getResponseBadRequest("'Vous n'avez pas le droit de faire ça");
            }

@@ -199,7 +210,9 @@ class WorkPackageController extends AbstractOscarController
            $workpackageid = $this->params()->fromQuery('workpackageid');

            if ($workpackagepersonid) {
                $workpackageperson = $this->getEntityManager()->getRepository(WorkPackagePerson::class)->find($workpackagepersonid);
                $workpackageperson = $this->getEntityManager()->getRepository(WorkPackagePerson::class)->find(
                    $workpackagepersonid
                );
                if (!$workpackageperson) {
                    return $this->getResponseBadRequest('Déclarant introuvable.');
                }
@@ -210,8 +223,8 @@ class WorkPackageController extends AbstractOscarController
                } catch (\Exception $e) {
                    return $this->getResponseInternalError('Impossible de supprimer le déclarant.');
                }
            }
            else if( $workpackageid ){
            } else {
                if ($workpackageid) {
                    $workpackage = $this->getEntityManager()->getRepository(WorkPackage::class)->find($workpackageid);
                    if (!$workpackage) {
                        return $this->getResponseBadRequest('Lot de travail introuvable.');
@@ -220,13 +233,16 @@ class WorkPackageController extends AbstractOscarController
                        $this->getEntityManager()->remove($workpackage);
                        $this->getEntityManager()->flush();
                        return $this->getResponseOk();
                }
                catch (ForeignKeyConstraintViolationException $ex) {
                    return $this->getResponseInternalError('Ce lot de travail est déjà utilisé pour des déclarations');
                }
                catch( \Exception $e ){
                    } catch (ForeignKeyConstraintViolationException $ex) {
                        return $this->getResponseInternalError(
                            'Ce lot de travail est déjà utilisé pour des déclarations'
                        );
                    } catch (\Exception $e) {
                        $this->getLoggerService()->error(get_class($e));
                    return $this->getResponseInternalError('Impossible de supprimer le lot de travail. ' . $e->getMessage());
                        return $this->getResponseInternalError(
                            'Impossible de supprimer le lot de travail. ' . $e->getMessage()
                        );
                    }
                }
            }

@@ -257,9 +273,18 @@ class WorkPackageController extends AbstractOscarController
                ->getQuery()
                ->getResult();

            $declarant = $this->getOscarUserContextService()->hasPrivileges(Privileges::ACTIVITY_WORKPACKAGE_COMMIT, $activity) && $activity->hasDeclarant($this->getCurrentPerson());
            $validateur = $this->getOscarUserContextService()->hasPrivileges(Privileges::ACTIVITY_TIMESHEET_VALIDATE_SCI, $activity)
                || $this->getOscarUserContextService()->hasPrivileges(Privileges::ACTIVITY_TIMESHEET_VALIDATE_ADM, $activity);
            $declarant = $this->getOscarUserContextService()->hasPrivileges(
                    Privileges::ACTIVITY_WORKPACKAGE_COMMIT,
                    $activity
                ) && $activity->hasDeclarant($this->getCurrentPerson());
            $validateur = $this->getOscarUserContextService()->hasPrivileges(
                    Privileges::ACTIVITY_TIMESHEET_VALIDATE_SCI,
                    $activity
                )
                || $this->getOscarUserContextService()->hasPrivileges(
                    Privileges::ACTIVITY_TIMESHEET_VALIDATE_ADM,
                    $activity
                );
            /** @var WorkPackage $workPackage */
            foreach ($workPackages as $workPackage) {
                $wp = $workPackage->toArray();
@@ -268,11 +293,15 @@ class WorkPackageController extends AbstractOscarController
                $workpackages[] = $wp;
            }

            $activityFormatter = new ActivityToJsonFormatter();

            // Accès générale
            $response = [
                'editable' => $this->getOscarUserContextService()->hasPrivileges(Privileges::ACTIVITY_WORKPACKAGE_MANAGE),
                'editable' => $this->getOscarUserContextService()->hasPrivileges(
                    Privileges::ACTIVITY_WORKPACKAGE_MANAGE
                ),
                'isDeclarant' => $declarant,
                'activity' => $activityFormatter->format($activity),
                'isValidateur' => $validateur,
                'workpackages' => $workpackages,
                'persons' => array_values($persons)
@@ -288,7 +317,6 @@ class WorkPackageController extends AbstractOscarController
        } catch (\Exception $e) {
            return $this->getResponseInternalError($e->getMessage());
        }

    }

    ////////////////////////////////////////////////////////////////////////////
@@ -308,11 +336,19 @@ class WorkPackageController extends AbstractOscarController
        $entity->getActivity()->touch();
        $this->getEntityManager()->flush();
        $this->getActivityLogService()->addUserInfo(
            sprintf("a supprimé jour le lot de travail '%s:%s' dans l'activité %s", $entity->getCode(), $entity->getLabel(), $entity->getActivity()->log()),
            'Activity', $entity->getActivity()->getId());
        $this->redirect()->toRoute('contract/show',
            ['id' => $entity->getActivity()->getId()]);

            sprintf(
                "a supprimé jour le lot de travail '%s:%s' dans l'activité %s",
                $entity->getCode(),
                $entity->getLabel(),
                $entity->getActivity()->log()
            ),
            'Activity',
            $entity->getActivity()->getId()
        );
        $this->redirect()->toRoute(
            'contract/show',
            ['id' => $entity->getActivity()->getId()]
        );
    }

    public function editAction()
@@ -340,12 +376,20 @@ class WorkPackageController extends AbstractOscarController
                $entity->getActivity()->touch();
                $this->getEntityManager()->flush();
                $this->getActivityLogService()->addUserInfo(
                    sprintf("a modifié le lot de travail '%s:%s' dans l'activité %s", $entity->getCode(), $entity->getLabel(), $entity->getActivity()->log()),
                    'Activity', $entity->getActivity()->getId());
                $this->redirect()->toRoute('contract/show',
                    ['id' => $entity->getActivity()->getId()]);
                    sprintf(
                        "a modifié le lot de travail '%s:%s' dans l'activité %s",
                        $entity->getCode(),
                        $entity->getLabel(),
                        $entity->getActivity()->log()
                    ),
                    'Activity',
                    $entity->getActivity()->getId()
                );
                $this->redirect()->toRoute(
                    'contract/show',
                    ['id' => $entity->getActivity()->getId()]
                );
            }

        }

        $view = new ViewModel([
@@ -356,12 +400,13 @@ class WorkPackageController extends AbstractOscarController
        $view->setTemplate('oscar/work-package/form.phtml');

        return $view;

    }

    public function newAction()
    {
        $activity = $this->getEntityManager()->getRepository(Activity::class)->find($this->params()->fromRoute('idactivity'));
        $activity = $this->getEntityManager()->getRepository(Activity::class)->find(
            $this->params()->fromRoute('idactivity')
        );

        $entity = new WorkPackage();
        $entity->setActivity($activity);
@@ -384,13 +429,21 @@ class WorkPackageController extends AbstractOscarController
                $this->getEntityManager()->flush();

                $this->getActivityLogService()->addUserInfo(
                    sprintf("a ajouté le lot de travail '%s:%s' dans l'activité %s", $entity->getCode(), $entity->getLabel(), $entity->getActivity()->log()),
                    'Activity', $entity->getActivity()->getId());

                $this->redirect()->toRoute('contract/show',
                    ['id' => $activity->getId()]);
                    sprintf(
                        "a ajouté le lot de travail '%s:%s' dans l'activité %s",
                        $entity->getCode(),
                        $entity->getLabel(),
                        $entity->getActivity()->log()
                    ),
                    'Activity',
                    $entity->getActivity()->getId()
                );

                $this->redirect()->toRoute(
                    'contract/show',
                    ['id' => $activity->getId()]
                );
            }

        }

        $view = new ViewModel([
+4 −1
Original line number Diff line number Diff line
@@ -51,7 +51,10 @@ class ViteUtils
            $jsFile = $script;
        } else {
            if (!array_key_exists($script, $this->manifest)) {
                throw new \Exception("Script $script");
                echo '<div class="alert alert-danger">'
                    . 'Script manquant ' . $script
                    . '</div>';
                return;
            }

            $conf = $this->manifest[$script];
+11 −0
Original line number Diff line number Diff line
@@ -126,6 +126,15 @@
            Revenir sur la fiche
        </a>
    </h1>

    <div id="workpackageui"
         data-url="<?= $this->url('workpackage/rest', ['idactivity' => $activity->getId()]) ?>"
         data-isvalidator="1"
         data-editable="1"
    ></div>

    <?php $this->Vite()->addJs('src/workpackageui.js'); ?>
    <?php /****
    <div>
        <small>
            du <strong><?= $this->moment($activity->getDateStart()) ?></strong>
@@ -162,6 +171,7 @@
            <i class="icon-archive"></i>
            Lots de travail
        </h2>

        <div id="workpackages"></div>
        <?php
        if ($this->grant()->privilege(\Oscar\Provider\Privileges::ACTIVITY_WORKPACKAGE_SHOW, $activity)): ?>
@@ -227,4 +237,5 @@
    </section>

    <?php endif; ?>
  /*******/ ?>
</div>
 No newline at end of file
+0 −8
Original line number Diff line number Diff line
@@ -2,14 +2,6 @@
// Récupération des informations utilisateur
?>
<div class="bg-white banner">
    <div class="container">
        PLOP
        <div id="example"></div>
        <pre><?php
        $this->Vite()->addJs('src/example.js');
            ?></pre>

    </div>
    <div class="container">

        <div class="col-md-3">
Loading