Ajout de la notion de domaine (fixes #72)

This commit is contained in:
2021-06-01 16:58:32 +02:00
parent 83e330b318
commit 0f517ec402
21 changed files with 850 additions and 34 deletions

View File

@@ -19,6 +19,10 @@ app_home_selectservice:
path: /user/selectservice
defaults: { _controller: App\Controller\HomeController:selectservice }
app_home_selectdomaine:
path: /user/selectdomaine
defaults: { _controller: App\Controller\HomeController:selectdomaine }
#== Security ====================================================================================================
app_login:
path: /login
@@ -114,6 +118,23 @@ app_service_delete:
path: /admin/service/delete/{id}
defaults: { _controller: App\Controller\ServiceController:delete }
#== Domaine =====================================================================================================
app_domaine:
path: /admin/domaine
defaults: { _controller: App\Controller\DomaineController:list }
app_domaine_submit:
path: /admin/domaine/submit
defaults: { _controller: App\Controller\DomaineController:submit }
app_domaine_update:
path: /admin/domaine/update/{id}
defaults: { _controller: App\Controller\DomaineController:update }
app_domaine_delete:
path: /admin/domaine/delete/{id}
defaults: { _controller: App\Controller\DomaineController:delete }
#== Nature =====================================================================================================
app_nature:
path: /admin/nature
@@ -191,11 +212,14 @@ app_project_activeproject:
path: /master/project/activeproject
defaults: { _controller: App\Controller\ProjectController:activeproject }
app_project_viewservice:
path: /master/project/viewservice
defaults: { _controller: App\Controller\ProjectController:viewservice }
app_project_select:
path: /master/project/select
defaults: { _controller: App\Controller\ProjectController:select }
app_project_users_add:
path: /master/project/users/add
defaults: { _controller: App\Controller\ProjectController:usersadd }
@@ -233,6 +257,10 @@ app_offer_activeoffer:
path: /master/offer/activeoffer
defaults: { _controller: App\Controller\OfferController:activeoffer }
app_offer_viewservice:
path: /master/offer/viewservice
defaults: { _controller: App\Controller\OfferController:viewservice }
app_offer_getorders:
path: /master/offer/getorders
defaults: { _controller: App\Controller\OfferController:getorders }
@@ -266,6 +294,10 @@ app_task_activetask:
path: /master/task/activetask
defaults: { _controller: App\Controller\TaskController:activetask }
app_task_viewservice:
path: /master/task/viewservice
defaults: { _controller: App\Controller\TaskController:viewservice }
#== Event ====================================================================================================
app_event:
path: /user/event

View File

@@ -0,0 +1,180 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\FormError;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use App\Entity\Domaine as Entity;
use App\Form\DomaineType as Form;
class DomaineController extends AbstractController
{
private $data = "domaine";
private $route = "app_domaine";
private $render = "Domaine/";
private $entity = "App:Domaine";
private $knpSnappy;
public function __construct(\Knp\Snappy\Pdf $knpSnappy) { $this->knpSnappy = $knpSnappy; }
public function list(Request $request)
{
$em = $this->getDoctrine()->getManager();
$datas = $em->getRepository($this->entity)->findAll();
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'list.html.twig',[
$this->data."s" => $datas,
"useheader" => true,
"usesidebar" => true,
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'domaines.pdf'
);
}
else {
return $this->render($this->render.'list.html.twig',[
$this->data."s" => $datas,
"useheader" => true,
"usesidebar" => true,
]);
}
}
public function submit(Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data = new Entity();
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"submit"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"submit");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'submit',
'form' => $form->createView()
]);
}
public function update($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Création du formulaire
$form = $this->createForm(Form::class,$data,array("mode"=>"update"));
// Récupération des data du formulaire
$form->handleRequest($request);
// Sur erreur
$this->getErrorForm(null,$form,$request,$data,"update");
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$data = $form->getData();
$em->persist($data);
$em->flush();
// Retour à la liste
return $this->redirectToRoute($this->route);
}
// Affichage du formulaire
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView(),
"fgprint" => true,
]);
return new PdfResponse(
$this->knpSnappy->getOutputFromHtml($render),
'domaine.pdf'
);
}
else {
return $this->render($this->render.'edit.html.twig', [
'useheader' => true,
'usesidebar' => true,
$this->data => $data,
'mode' => 'update',
'form' => $form->createView()
]);
}
}
public function delete($id,Request $request)
{
// Initialisation de l'enregistrement
$em = $this->getDoctrine()->getManager();
$data=$em->getRepository($this->entity)->find($id);
// Controle avant suppression
$error=false;
if($error)
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
else {
try {
$em->remove($data);
$em->flush();
}
catch(\Doctrine\DBAL\DBALException $e) {
// Création du formulaire
$this->get('session')->getFlashBag()->add('error', 'Impossible de supprimer cet enregistrement');
return $this->redirectToRoute($this->route."_update",["id"=>$id]);
}
// Retour à la liste
return $this->redirectToRoute($this->route);
}
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}
if ($form->get('submit')->isClicked() && $mode=="submit") {
}
if ($form->get('submit')->isClicked() && !$form->isValid()) {
$this->get('session')->getFlashBag()->clear();
$errors = $form->getErrors();
foreach( $errors as $error ) {
$request->getSession()->getFlashBag()->add("error", $error->getMessage());
}
}
}
}

View File

@@ -61,7 +61,9 @@ class HomeController extends AbstractController
{
$em = $this->getDoctrine()->getManager();
$iddomaine = $this->get('session')->get('iddomaine');
$idservice = $request->request->get('idservice');
$this->get('session')->set('idservice',$idservice);
$output=["return"=>"OK"];
@@ -86,12 +88,40 @@ class HomeController extends AbstractController
}
$this->get('session')->set('users',$tbusers);
if(!$haveuser) $this->get('session')->set("iduser","all");
// On recalcul les projets
$this->regenProjects($idservice,$iddomaine);
return new Response(json_encode($output));
}
public function selectdomaine(Request $request)
{
$iddomaine = $request->request->get('iddomaine');
$idservice = $this->get('session')->get('idservice');
$this->get('session')->set('iddomaine',$iddomaine);
$output=["return"=>"OK"];
// On recalcul les projets
if($idservice=="all")
$this->regenProjects($idservice,$iddomaine);
return new Response(json_encode($output));
}
private function regenProjects($idservice,$iddomaine) {
$em = $this->getDoctrine()->getManager();
if($idservice=="all"&&$iddomaine=="all")
$projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject')]);
else
elseif($idservice!="all"&&$iddomaine!="all")
$projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject'),"service"=>$idservice,"domaine"=>$iddomaine]);
elseif($idservice!="all")
$projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject'),"service"=>$idservice]);
else
$projects=$em->getRepository('App:Project')->findBy(["active"=>$this->get('session')->get('activeproject'),"domaine"=>$iddomaine]);
$tbprojects=[];
$haveproject=false;
foreach($projects as $project) {
@@ -106,7 +136,5 @@ class HomeController extends AbstractController
}
$this->get('session')->set('projects',$tbprojects);
if(!$haveproject) $this->get('session')->set("idproject","all");
return new Response(json_encode($output));
}
}

View File

@@ -29,10 +29,12 @@ class OfferController extends AbstractController
{
$em = $this->getDoctrine()->getManager();
$services=$em->getRepository("App:Service")->findAllOfferActive($this->get('session')->get('activeproject'),$this->get('session')->get('activeoffer'),$this->get('session')->get('idservice'));
$domaines=$em->getRepository("App:Domaine")->findAllOfferActive($this->get('session')->get('activeproject'),$this->get('session')->get('activeoffer'),$this->get('session')->get('iddomaine'));
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
"fgprint" => true,
@@ -46,6 +48,7 @@ class OfferController extends AbstractController
else {
return $this->render($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
"doliactive" => $this->getParameter('doliActive'),
@@ -219,6 +222,12 @@ class OfferController extends AbstractController
$this->get('session')->set('activeoffer',!$this->get('session')->get('activeoffer'));
return $this->redirectToRoute($this->route);
}
public function viewservice() {
$this->get('session')->set('viewservice',!$this->get('session')->get('viewservice'));
return $this->redirectToRoute($this->route);
}
public function getorders(){
$em = $this->getDoctrine()->getManager();
$orders = $this->dolibarrapi->getOrders();

View File

@@ -27,10 +27,12 @@ class ProjectController extends AbstractController
{
$em = $this->getDoctrine()->getManager();
$services=$em->getRepository("App:Service")->findAllProjectActive($this->get('session')->get('activeproject'),$this->get('session')->get('idservice'));
$domaines=$em->getRepository("App:Domaine")->findAllProjectActive($this->get('session')->get('activeproject'),$this->get('session')->get('iddomaine'));
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
"fgprint" => true,
@@ -44,6 +46,7 @@ class ProjectController extends AbstractController
else {
return $this->render($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
]);
@@ -287,6 +290,13 @@ class ProjectController extends AbstractController
return $this->redirectToRoute($this->route);
}
public function viewservice() {
$this->get('session')->set('viewservice',!$this->get('session')->get('viewservice'));
$this->refreshsession();
return $this->redirectToRoute($this->route);
}
protected function refreshsession() {
$em = $this->getDoctrine()->getManager();
$tbprojects=[];

View File

@@ -246,12 +246,19 @@ class ReportController extends AbstractController
continue;
}
// Filtre par Domaine
if($this->get('session')->get('iddomaine')!="all") {
if($project->getDomaine()->getId()!=$this->get('session')->get('iddomaine'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($project->getId()!=$this->get('session')->get('idproject'))
continue;
}
// Ne prendre que les projets actif/inactif
if($this->get('session')->get('activeproject')!=$project->getActive())
continue;
@@ -501,6 +508,12 @@ class ReportController extends AbstractController
continue;
}
// Filtre par Domaine
if($this->get('session')->get('iddomaine')!="all") {
if($project->getDomaine()->getId()!=$this->get('session')->get('iddomaine'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($project->getId()!=$this->get('session')->get('idproject'))
@@ -713,8 +726,6 @@ class ReportController extends AbstractController
$end->add(new \DateInterval('P'.$nbmonth.'M'));
$end->sub(new \DateInterval('P1D'));
$end->setTime(23,59,0);
dump($start);
dump($end);
while($start<$end) {
$tbproject["months"][$start->format("Ym")]=[
"monthid"=> $start->format("Ym"),
@@ -906,6 +917,7 @@ class ReportController extends AbstractController
$project=$event->getTask()->getProject();
$idproject=$project->getId();
$idservice=$project->getService()->getId();
$iddomaine=$project->getDomaine()->getId();
$activeproject=$project->getActive();
// Filtre par Service
@@ -914,6 +926,12 @@ class ReportController extends AbstractController
continue;
}
// Filtre par Domaine
if($this->get('session')->get('iddomaine')!="all") {
if($iddomaine!=$this->get('session')->get('iddomaine'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($idproject!=$this->get('session')->get('idproject'))
@@ -968,6 +986,7 @@ class ReportController extends AbstractController
$project=$penalty->getTask()->getProject();
$idproject=$project->getId();
$idservice=$project->getService()->getId();
$iddomaine=$project->getDomaine()->getId();
$activeproject=$project->getActive();
// Filtre par Service
@@ -976,6 +995,12 @@ class ReportController extends AbstractController
continue;
}
// Filtre par Domaine
if($this->get('session')->get('iddomaine')!="all") {
if($iddomaine!=$this->get('session')->get('iddomaine'))
continue;
}
// Filtre par project
if($this->get('session')->get('idproject')!="all") {
if($idproject!=$this->get('session')->get('idproject'))

View File

@@ -25,10 +25,12 @@ class TaskController extends AbstractController
{
$em = $this->getDoctrine()->getManager();
$services=$em->getRepository("App:Service")->findAllTaskActive($this->get('session')->get('activeproject'),$this->get('session')->get('idservice'));
$domaines=$em->getRepository("App:Domaine")->findAllTaskActive($this->get('session')->get('activeproject'),$this->get('session')->get('iddomaine'));
if($request->query->get('fgprint')) {
$render = $this->renderView($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
"fgprint" => true,
@@ -42,6 +44,7 @@ class TaskController extends AbstractController
else {
return $this->render($this->render.'list.html.twig',[
"services" => $services,
"domaines" => $domaines,
"useheader" => true,
"usesidebar" => true,
]);
@@ -173,12 +176,11 @@ class TaskController extends AbstractController
return $this->redirectToRoute($this->route);
}
public function activeoffer() {
$this->get('session')->set('activeoffer',!$this->get('session')->get('activeoffer'));
public function viewservice() {
$this->get('session')->set('viewservice',!$this->get('session')->get('viewservice'));
return $this->redirectToRoute($this->route);
}
protected function getErrorForm($id,$form,$request,$data,$mode) {
if ($form->get('submit')->isClicked()&&$mode=="delete") {
}

View File

@@ -0,0 +1,144 @@
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Domaine
*
* @ORM\Table(name="domaine")
* @ORM\Entity(repositoryClass="App\Repository\DomaineRepository")
*/
class Domaine
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string")
*
*/
private $name;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\OneToMany(targetEntity="User", mappedBy="domaine", cascade={"persist"}, orphanRemoval=false)
*/
private $users;
/**
* @ORM\OneToMany(targetEntity="Project", mappedBy="domaine", cascade={"persist"}, orphanRemoval=false)
*/
private $projects;
public function __construct()
{
$this->users = new ArrayCollection();
$this->projects = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
/**
* @return Collection|User[]
*/
public function getUsers(): Collection
{
return $this->users;
}
public function addUser(User $user): self
{
if (!$this->users->contains($user)) {
$this->users[] = $user;
$user->setDomaine($this);
}
return $this;
}
public function removeUser(User $user): self
{
if ($this->users->contains($user)) {
$this->users->removeElement($user);
// set the owning side to null (unless already changed)
if ($user->getDomaine() === $this) {
$user->setDomaine(null);
}
}
return $this;
}
/**
* @return Collection|Project[]
*/
public function getProjects(): Collection
{
return $this->projects;
}
public function addProject(Project $project): self
{
if (!$this->projects->contains($project)) {
$this->projects[] = $project;
$project->setDomaine($this);
}
return $this;
}
public function removeProject(Project $project): self
{
if ($this->projects->contains($project)) {
$this->projects->removeElement($project);
// set the owning side to null (unless already changed)
if ($project->getDomaine() === $this) {
$project->setDomaine(null);
}
}
return $this;
}
}

View File

@@ -51,6 +51,11 @@ class Project
*/
private $service;
/**
* @ORM\ManyToOne(targetEntity="Domaine", inversedBy="projects")
*/
private $domaine;
/**
* @ORM\OneToMany(targetEntity="Offer", mappedBy="project", cascade={"persist"}, orphanRemoval=false)
*/
@@ -242,5 +247,17 @@ class Project
return $this;
}
public function getDomaine(): ?Domaine
{
return $this->domaine;
}
public function setDomaine(?Domaine $domaine): self
{
$this->domaine = $domaine;
return $this;
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class DomaineType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('submit',
SubmitType::class, [
"label" => "Valider",
"attr" => ["class" => "btn btn-success no-print"],
]
);
$builder->add('name',
TextType::class, [
"label" =>"Nom"
]
);
$builder->add('description',
CKEditorType::class, [
"required" => false,
"config" => [
'uiColor' => '#ffffff',
],
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Entity\Domaine',
'mode' => 'string',
));
}
}

View File

@@ -69,11 +69,18 @@ class ProjectType extends AbstractType
$builder->add('service',
EntityType::class, [
"class" => "App:Service",
"label" => "Service",
"label" => "Activité",
"choice_label" => "name",
]
);
$builder->add('domaine',
EntityType::class, [
"class" => "App:Domaine",
"label" => "Domaine",
"choice_label" => "name",
]
);
}
public function configureOptions(OptionsResolver $resolver)

View File

@@ -0,0 +1,57 @@
<?php
namespace App\Repository;
use App\Entity\Domaine;
use App\Entity\Project;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Persistence\ManagerRegistry;
class DomaineRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Domaine::class);
}
public function findAllProjectActive($activeproject,$iddomaine) {
$qb = $this->createQueryBuilder('domaine')
->from('App:Project','project')
->Where('project.active=:activeproject')
->andWhere('project.domaine=domaine');
if($iddomaine!="all")
$qb->andWhere("domaine.id=:id")->setParameter('id',$iddomaine);
return $qb->getQuery()->setParameter('activeproject',$activeproject)->getResult();
}
public function findAllOfferActive($activeproject,$activeoffer,$iddomaine) {
$qb = $this->createQueryBuilder('domaine')
->from('App:Project','project')
->from('App:Offer','offer')
->Where('offer.active=:activeoffer')
->andWhere('project.active=:activeproject')
->andWhere('project.domaine=domaine')
->andWhere('offer.project=project');
if($iddomaine!="all")
$qb->andWhere("domaine.id=:id")->setParameter('id',$iddomaine);
return $qb->getQuery()->setParameter('activeproject',$activeproject)->setParameter('activeoffer',$activeoffer)->getResult();
}
public function findAllTaskActive($activeproject,$iddomaine) {
$qb = $this->createQueryBuilder('domaine')
->from('App:Project','project')
->Where('project.active=:activeproject')
->andWhere('project.domaine=domaine');
if($iddomaine!="all")
$qb->andWhere("domaine.id=:id")->setParameter('id',$iddomaine);
return $qb->getQuery()->setParameter('activeproject',$activeproject)->getResult();
}
}

View File

@@ -71,6 +71,7 @@ class sessionListener {
$session->set('activeoffer',true);
$session->set('activeholiday',true);
$session->set('activetimer',true);
$session->set('viewservice',true);
$session->set('nbmonth',3);
if($curentuser!="anon.") {
@@ -81,11 +82,13 @@ class sessionListener {
$session->set('idproject',"all");
$session->set('idservice',"all");
$session->set('iddomaine',"all");
}
else {
$session->set('iduser',"all");
$session->set('idproject',"all");
$session->set('idservice',"all");
$session->set('iddomaine',"all");
}
$tbusers=[];
@@ -123,6 +126,17 @@ class sessionListener {
}
$session->set('services',$tbservices);
$tbdomaines=[];
$domaines=$this->em->getRepository('App:Domaine')->findAll();
foreach($domaines as $domaine) {
$tmp=[
"id"=>$domaine->getId(),
"name"=>$domaine->getName()
];
array_push($tbdomaines,$tmp);
}
$session->set('domaines',$tbdomaines);
}
}
}

View File

@@ -0,0 +1,70 @@
{% extends 'base.html.twig' %}
{% block body %}
{{ form_start(form) }}
<h1 class="page-header">
{% if fgprint is defined and fgprint %}
DOMAINE
{% elseif mode=="update" %}
Modification DOMAINE
{% elseif mode=="submit" %}
Création DOMAINE
{% endif %}
</h1>
{{ form_widget(form.submit) }}
<a class="btn btn-secondary" href={{ path('app_domaine') }}>Annuler</a>
{% if mode=="update" %}
<a href="{{ path('app_domaine_delete',{'id':domaine.id}) }}"
class="btn btn-danger float-right"
data-method="delete"
data-confirm="Êtes-vous sûr de vouloir supprimer cet entregistrement ?">
Supprimer
</a>
{% endif %}
<br><br>
{% if app.session.flashbag.has('error') %}
<div class='alert alert-danger' style='margin: 5px 0px'>
<strong>Erreur</strong><br>
{% for flashMessage in app.session.flashbag.get('error') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
{% if app.session.flashbag.has('notice') %}
<div class='alert alert-info' style='margin: 5px 0px'>
<strong>Information</strong><br>
{% for flashMessage in app.session.flashbag.get('notice') %}
{{ flashMessage }}<br>
{% endfor %}
</div>
{% endif %}
<div class="card">
<div class="card-header">
<i class="fa fa-pencil-alt fa-fw"></i> Informations
</div>
<div class="card-body">
{{ form_row(form.name) }}
{{ form_row(form.description) }}
</div>
</div>
{{ form_end(form) }}
{% endblock %}
{% block localjavascript %}
$(document).ready(function() {
$("#domaine_name").focus();
});
function myprint() {
href=document.location.href;
document.location.href=href+"?fgprint=true";
}
{% endblock %}

View File

@@ -0,0 +1,70 @@
{% extends "base.html.twig" %}
{% block localstyle %}
{% if fgprint is defined and fgprint %}
table { font-size:10px;}
th,td {
border: 1px solid #37474F;
}
thead {
display: table-header-group;
}
tr { page-break-inside: avoid; }
{%endif%}
{% endblock %}
{% block body %}
<h1 class="page-header">
DOMAINES
</h1>
<p><a class="btn btn-success" href={{ path('app_domaine_submit') }}>Ajouter</a></p>
<div class="card">
<div class="card-header">
<i class="fa fa-table fa-fw"></i> Liste des Domaines
</div>
<div class="card-body">
<div class="dataTable_wrapper">
<table class="table table-striped table-bordered table-hover" id="dataTables" style="width:100%">
<thead>
<tr>
<th width="70px" class="no-sort no-print">Action</th>
<th>Nom</th>
</tr>
</thead>
<tbody>
{% for domaine in domaines %}
<tr>
<td class="no-print">
<a href="{{path("app_domaine_update",{id:domaine.id})}}"><i class="fa fa-file"></i></a>
</td>
<td>{{domaine.name}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
{% endblock %}
{% block localjavascript %}
$(document).ready(function() {
{% if not fgprint is defined or not fgprint %}
$('#dataTables').DataTable({
columnDefs: [ { "targets": "no-sort", "orderable": false }, { "targets": "no-string", "type" : "num" } ],
responsive: true,
iDisplayLength: 100,
order: [[ 1, "asc" ]]
});
{%else%}
$('#dataTables').removeClass("table table-striped table-bordered table-hover small dataTable no-footer");
{% endif %}
});
function myprint() {
href=document.location.href;
document.location.href=href+"?fgprint=true";
}
{% endblock %}

View File

@@ -18,7 +18,7 @@
{% block body %}
<h1 class="page-header">
COMMANDES
COMMANDES {% if app.session.get('viewservice') %}PAR ACTVITE{%else%}PAR DOMAINE{%endif%}
</h1>
<a class="btn btn-success" href={{ path('app_offer_submit') }}>Ajouter</a>
@@ -36,13 +36,28 @@
<label class="custom-control-label" for="switchactiveoffer">Proposition Active</label>
</div>
<div class="custom-control custom-switch float-right mr-3">
<input type="checkbox" class="custom-control-input" id="switchservice" {% if app.session.get('viewservice') %} checked {% endif %}>
{% if app.session.get('viewservice') %}
<label class="custom-control-label" for="switchservice">Vue par Activité</label>
{% else %}
<label class="custom-control-label" for="switchservice">Vue par Domaine</label>
{% endif %}
</div>
<p></p>
{%for service in services %}
{% if not service.projects is empty %}
{% if app.session.get('viewservice') %}
{% set loop01s=services %}
{% else %}
{% set loop01s=domaines %}
{% endif %}
{%for loop01 in loop01s %}
{% if not loop01.projects is empty %}
{% set haveoffer=false %}
{% set haveproject=false %}
{% for project in service.projects %}
{% for project in loop01.projects %}
{% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %}
{% for offer in project.offers %}
{% if app.session.get('activeoffer')==offer.active %}
@@ -57,7 +72,7 @@
{% if haveoffer and haveproject %}
<div class="card">
<div class="card-header">
<i class="fa fa-table fa-fw"></i> {{ service.name }}
<i class="fa fa-table fa-fw"></i> {{ loop01.name }}
</div>
<div class="card-body">
@@ -76,7 +91,7 @@
</tr>
</thead>
<tbody>
{% for project in service.projects %}
{% for project in loop01.projects %}
{% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %}
{% for offer in project.offers %}
{% if app.session.get('activeoffer')==offer.active %}
@@ -139,4 +154,7 @@
window.location="{{ path('app_offer_activeoffer' )}}";
});
$('#switchservice').change(function() {
window.location="{{ path('app_offer_viewservice' )}}";
});
{% endblock %}

View File

@@ -56,6 +56,7 @@
{{ form_row(form.customer) }}
{{ form_row(form.visible) }}
{{ form_row(form.service) }}
{{ form_row(form.domaine) }}
</div>
</div>
{{ form_end(form) }}

View File

@@ -19,7 +19,7 @@
{% block body %}
<h1 class="page-header">
PROJETS
PROJETS {% if app.session.get('viewservice') %} PAR ACTVITE{%else%} PAR DOMAINE{%endif%}
</h1>
<a class="btn btn-success" href={{ path('app_project_submit') }}>Ajouter</a>
@@ -29,13 +29,28 @@
<label class="custom-control-label" for="switchactive">Projet Actif</label>
</div>
<div class="custom-control custom-switch float-right mr-3">
<input type="checkbox" class="custom-control-input" id="switchservice" {% if app.session.get('viewservice') %} checked {% endif %}>
{% if app.session.get('viewservice') %}
<label class="custom-control-label" for="switchservice">Vue par Activité</label>
{% else %}
<label class="custom-control-label" for="switchservice">Vue par Domaine</label>
{% endif %}
</div>
<p></p>
{%for service in services %}
{% if not service.projects is empty %}
{% if app.session.get('viewservice') %}
{% set loop01s=services %}
{% else %}
{% set loop01s=domaines %}
{% endif %}
{%for loop01 in loop01s %}
{% if not loop01.projects is empty %}
{% set haveproject=false %}
{% for project in service.projects %}
{% for project in loop01.projects %}
{% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %}
{% set haveproject=true %}
{% endif %}
@@ -44,7 +59,7 @@
{% if haveproject %}
<div class="card">
<div class="card-header">
<i class="fa fa-table fa-fw"></i> {{ service.name }}
<i class="fa fa-table fa-fw"></i> {{ loop01.name }}
</div>
<div class="card-body">
@@ -53,8 +68,9 @@
<thead>
<tr>
<th width="70px" class="no-sort no-print">Action</th>
<th width="300px">Client</th>
<th width="200px">Client</th>
<th>Nom</th>
<th width="200px">{% if app.session.get('viewservice') %}Domaine{%else%}Activité{%endif%}</th>
<th width="100px" class="text-center no-string">Estimé</th>
<th width="100px" class="text-center no-string">Commandé</th>
<th width="100px" class="text-center no-string">Validé</th>
@@ -64,7 +80,7 @@
</tr>
</thead>
<tbody>
{% for project in service.projects %}
{% for project in loop01.projects %}
{% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %}
<tr>
<td class="no-print">
@@ -79,6 +95,7 @@
</td>
<td>{{project.customer.name}}</td>
<td>{{project.name}}</td>
<td>{% if app.session.get('viewservice') %}{%if not project.domaine is empty %}{{project.domaine.name}}{%endif%}{%else%}{{project.service.name}}{%endif%}</td>
<td class="text-right">
{% set tottask=0 %}
{% set totvalidate=0 %}
@@ -155,6 +172,10 @@
window.location="{{ path('app_project_activeproject' )}}";
});
$('#switchservice').change(function() {
window.location="{{ path('app_project_viewservice' )}}";
});
function myprint() {
href=document.location.href;
document.location.href=href+"?fgprint=true";

View File

@@ -7,7 +7,7 @@ STATISTIQUES
</h1>
<div class="row">
<div class="col-md-12">
<div class="col-md-12 mb-4">
<div class="card homecard" style="width: 100%; height: 520px;">
<div class="card-header">
CADOLES

View File

@@ -20,7 +20,7 @@
{% block body %}
<h1 class="page-header">
TACHES
TACHES {% if app.session.get('viewservice') %}PAR ACTVITE{%else%}PAR DOMAINE{%endif%}
</h1>
<a class="btn btn-success" href={{ path('app_task_submit') }}>Ajouter</a>
@@ -35,14 +35,29 @@
<label class="custom-control-label" for="switchactivetask">Tâche Active</label>
</div>
<div class="custom-control custom-switch float-right mr-3">
<input type="checkbox" class="custom-control-input" id="switchservice" {% if app.session.get('viewservice') %} checked {% endif %}>
{% if app.session.get('viewservice') %}
<label class="custom-control-label" for="switchservice">Vue par Activité</label>
{% else %}
<label class="custom-control-label" for="switchservice">Vue par Domaine</label>
{% endif %}
</div>
<p></p>
{%for service in services %}
{% if not service.projects is empty %}
{% if app.session.get('viewservice') %}
{% set loop01s=services %}
{% else %}
{% set loop01s=domaines %}
{% endif %}
{%for loop01 in loop01s %}
{% if not loop01.projects is empty %}
{% set havetask=false %}
{% set haveproject=false %}
{% for project in service.projects %}
{% for project in loop01.projects %}
{% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %}
{% if not project.tasks is empty %}
{% set havetask=true %}
@@ -55,7 +70,7 @@
{% if haveproject and havetask %}
<div class="card">
<div class="card-header">
<i class="fa fa-table fa-fw"></i> {{ service.name }}
<i class="fa fa-table fa-fw"></i> {{ loop01.name }}
</div>
<div class="card-body">
@@ -77,7 +92,7 @@
</tr>
</thead>
<tbody>
{% for project in service.projects %}
{% for project in loop01.projects %}
{% if app.session.get('activeproject')==project.active and (app.session.get('idproject')=="all" or app.session.get('idproject')==project.id) %}
{% for task in project.tasks %}
{% if app.session.get('activetask')==task.active %}
@@ -145,10 +160,14 @@
$('#switchactive').change(function() {
window.location="{{ path('app_task_activeproject' )}}";
});
$('#switchactivetask').change(function() {
window.location="{{ path('app_task_activetask' )}}";
});
$('#switchservice').change(function() {
window.location="{{ path('app_task_viewservice' )}}";
});
function myprint() {
href=document.location.href;

View File

@@ -292,7 +292,21 @@
</select>
</div>
<label class="control-label" style="padding:0px 10px 5px 10px; color:#fff;">
Domaine
</label>
<div class="select-control">
<select class="form-control select2entity" id="sidedomaine" name="sidedomaine">
<option value="all" selected>Toutes les domaines</option>
{% for domaine in app.session.get('domaines') %}
{% set selected="" %}
{%if domaine.id==app.session.get('iddomaine') %}
{% set selected="selected" %}
{% endif %}
<option value="{{domaine.id}}" {{selected}}>{{domaine.name}}</option>
{% endfor %}
</select>
</div>
<label class="control-label" style="padding:0px 10px 5px 10px; color:#fff;">
Intervenant
@@ -442,6 +456,12 @@
</a>
</li>
<li>
<a href="{{path("app_domaine")}}">
<i class="fas fa-money-bill-alt"></i>&nbsp;Domaines
</a>
</li>
<li>
<a href="{{path("app_user")}}">
<i class="fa fa-users"></i>Utilisateurs
@@ -554,6 +574,20 @@
}
});
});
$('#sidedomaine').on('select2:select', function (e) {
var data = e.params.data;
$.ajax({
type: "POST",
data: {
iddomaine: data.id,
},
url: "{{ path('app_home_selectdomaine') }}",
success: function (response) {
location.reload();
}
});
});
</script>
<script>