diff --git a/assets/admin.js b/assets/admin.js index fe81143..b09c8fe 100644 --- a/assets/admin.js +++ b/assets/admin.js @@ -4,6 +4,7 @@ import {AutoSubmit} from './class/AutoSubmit' import {ServerCard} from './class/ServerCard' import {AutoCustomer} from './class/AutoCustomer' import {RepeatLine} from './class/RepeatLine' +import {OrderCtrl} from './class/OrderCtrl' function script() { @@ -11,6 +12,7 @@ function script() { customElements.define('server-card',ServerCard,{extends:'div'}) customElements.define('auto-customer',AutoCustomer,{extends:'button'}) customElements.define('repeat-line',RepeatLine,{extends:'div'}) + customElements.define('order-ctrl',OrderCtrl,{extends:'div'}) } diff --git a/assets/class/OrderCtrl.js b/assets/class/OrderCtrl.js new file mode 100644 index 0000000..1e42eda --- /dev/null +++ b/assets/class/OrderCtrl.js @@ -0,0 +1,23 @@ +export class OrderCtrl extends HTMLDivElement{ + connectedCallback(){ + let element = this; + + let selectType = this.querySelector('select[name="type"]'); + let inputNum = this.querySelector('input[name="num"]'); + + fetch("/api-interne/intranet/customer/order/num?type=avis") + .then(response => response.json()) + .then(data => { + inputNum.setAttribute('value',data.num) + inputNum.value = data.num; + }) + selectType.addEventListener('change', (event)=>{ + fetch("/api-interne/intranet/customer/order/num?type="+event.target.value) + .then(response => response.json()) + .then(data => { + inputNum.setAttribute('value',data.num) + inputNum.value = data.num; + }) + }) + } +} diff --git a/migrations/Version20250724074150.php b/migrations/Version20250724074150.php new file mode 100644 index 0000000..fb8dbf8 --- /dev/null +++ b/migrations/Version20250724074150.php @@ -0,0 +1,34 @@ +addSql('CREATE TABLE order_number_current (id SERIAL NOT NULL, current_number VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE order_number_dispo (id SERIAL NOT NULL, num VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('DROP TABLE order_number_current'); + $this->addSql('DROP TABLE order_number_dispo'); + } +} diff --git a/src/Controller/ApiInterne/Intranet/NumController.php b/src/Controller/ApiInterne/Intranet/NumController.php new file mode 100644 index 0000000..c69a85b --- /dev/null +++ b/src/Controller/ApiInterne/Intranet/NumController.php @@ -0,0 +1,65 @@ +query->get('type'); + $t = new \DateTimeImmutable(); + if($type == "avis"){ + return $this->json([ + 'num' => "A-".$t->format('Y/m')."/".sprintf('%05d',$customerAdvertPaymentRepository->count()+1), + ]); + } elseif ($type == "devis") { + return $this->json([ + 'num' => "D-".$t->format('Y/m')."/".sprintf('%05d',$customerDevisLineRepository->count()+1), + ]); + } else { + + $numFinal = null; + if($currentDispoRepository->count() >0) { + $numFinal = $currentDispoRepository->findBy([],['id'=>'ASC'])[0]->getNum(); + } else { + $lastNum = $currentRepository->find(1); + if(!$lastNum instanceof OrderNumberCurrent) { + $lastNum = new OrderNumberCurrent(); + $lastNum->setCurrentNumber($customerOrderRepository->count()); + $numFinal = "F-".$t->format('Y/m')."/".sprintf('%05d',$customerOrderRepository->count()+1); + $entityManager->persist($lastNum); + $entityManager->flush(); + } else { + $numFinal = "F-".$t->format('Y/m')."/".sprintf('%05d',$lastNum->getCurrentNumber()+1); + } + } + + return $this->json([ + 'num' => $numFinal, + ]); + } + + } + +} diff --git a/src/Controller/Artemis/Intranet/CustomerController.php b/src/Controller/Artemis/Intranet/CustomerController.php index 7dd127e..422c5d7 100644 --- a/src/Controller/Artemis/Intranet/CustomerController.php +++ b/src/Controller/Artemis/Intranet/CustomerController.php @@ -3,7 +3,10 @@ namespace App\Controller\Artemis\Intranet; use App\Entity\Customer; +use App\Entity\CustomerAdvertPayment; use App\Entity\CustomerContact; +use App\Entity\CustomerDevis; +use App\Entity\CustomerDevisLine; use App\Entity\CustomerDns; use App\Form\Artemis\Intranet\CustomerEditType; use App\Form\Artemis\Intranet\CustomerNddType; @@ -126,10 +129,15 @@ class CustomerController extends AbstractController } return $this->redirectToRoute('artemis_intranet_customer_view',['id'=>$customer->getId(),'current'=>'nnd']); } + + + $orderDevis = $entityManager->getRepository(CustomerDevis::class)->findBy(['customer'=>$customer],['id'=>'ASC']); + return $this->render('artemis/intranet/customer/edit.twig',[ 'form' => $form->createView(), 'formNdd' => $formNdd->createView(), 'customer' => $customer, + 'orderDevis' => $orderDevis, 'current' => $request->get('current','main'), 'currentOrder' => $request->get('currentOrder','f'), 'ndds' => $customerDnsRepository->findBy(['customer'=>$customer],['expiredAt'=>'asc']) @@ -173,6 +181,34 @@ class CustomerController extends AbstractController #[Route(path: '/artemis/intranet/customer/{id}/orderAdd',name: 'artemis_intranet_customer_orderAdd',methods: ['GET', 'POST'])] public function customerOrder(?Customer $customer,Request $request,LoggerService $loggerService,EntityManagerInterface $entityManager,EventDispatcherInterface $eventDispatcher): Response { + if($request->isMethod('POST')) { + $data = $_POST; + if($data['type'] == "devis") { + $devis = new CustomerDevis(); + $devis->setCustomer($customer); + $devis->setCreateAt(\DateTimeImmutable::createFromFormat('Y-m-d\TH:i',$data['date'])); + $devis->setNumDevis($data['num']); + $devis->setState("created"); + $entityManager->persist($devis); + $r=0; + + foreach ($data['lines'] as $line) { + $devisLine = new CustomerDevisLine(); + $devisLine->setPos($r); + $devisLine->setName($line['title']); + $devisLine->setPriceHT($line['price']); + $devisLine->setContent($line['description']); + $devisLine->setTva(1.20); + $entityManager->persist($devisLine); + $devis->addCustomerDevisLine($devisLine); + $entityManager->persist($devis); + $r = $r+1; + } + $entityManager->flush(); + $this->addFlash("success","Création effectuée"); + return $this->redirectToRoute('artemis_intranet_customer_view',['id'=>$customer->getId(),'current'=>'order']); + } + } return $this->render('artemis/intranet/customer/order-add.twig',[ 'customer' => $customer, ]); diff --git a/src/Entity/OrderNumberCurrent.php b/src/Entity/OrderNumberCurrent.php new file mode 100644 index 0000000..77725ed --- /dev/null +++ b/src/Entity/OrderNumberCurrent.php @@ -0,0 +1,35 @@ +id; + } + + public function getCurrentNumber(): ?string + { + return $this->currentNumber; + } + + public function setCurrentNumber(string $currentNumber): static + { + $this->currentNumber = $currentNumber; + + return $this; + } +} diff --git a/src/Entity/OrderNumberDispo.php b/src/Entity/OrderNumberDispo.php new file mode 100644 index 0000000..1d14a66 --- /dev/null +++ b/src/Entity/OrderNumberDispo.php @@ -0,0 +1,35 @@ +id; + } + + public function getNum(): ?string + { + return $this->num; + } + + public function setNum(string $num): static + { + $this->num = $num; + + return $this; + } +} diff --git a/src/Repository/OrderNumberCurrentRepository.php b/src/Repository/OrderNumberCurrentRepository.php new file mode 100644 index 0000000..ce9ff44 --- /dev/null +++ b/src/Repository/OrderNumberCurrentRepository.php @@ -0,0 +1,43 @@ + + */ +class OrderNumberCurrentRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, OrderNumberCurrent::class); + } + + // /** + // * @return OrderNumberCurrent[] Returns an array of OrderNumberCurrent objects + // */ + // public function findByExampleField($value): array + // { + // return $this->createQueryBuilder('o') + // ->andWhere('o.exampleField = :val') + // ->setParameter('val', $value) + // ->orderBy('o.id', 'ASC') + // ->setMaxResults(10) + // ->getQuery() + // ->getResult() + // ; + // } + + // public function findOneBySomeField($value): ?OrderNumberCurrent + // { + // return $this->createQueryBuilder('o') + // ->andWhere('o.exampleField = :val') + // ->setParameter('val', $value) + // ->getQuery() + // ->getOneOrNullResult() + // ; + // } +} diff --git a/src/Repository/OrderNumberDispoRepository.php b/src/Repository/OrderNumberDispoRepository.php new file mode 100644 index 0000000..0c721c0 --- /dev/null +++ b/src/Repository/OrderNumberDispoRepository.php @@ -0,0 +1,43 @@ + + */ +class OrderNumberDispoRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, OrderNumberDispo::class); + } + + // /** + // * @return OrderNumberDispo[] Returns an array of OrderNumberDispo objects + // */ + // public function findByExampleField($value): array + // { + // return $this->createQueryBuilder('o') + // ->andWhere('o.exampleField = :val') + // ->setParameter('val', $value) + // ->orderBy('o.id', 'ASC') + // ->setMaxResults(10) + // ->getQuery() + // ->getResult() + // ; + // } + + // public function findOneBySomeField($value): ?OrderNumberDispo + // { + // return $this->createQueryBuilder('o') + // ->andWhere('o.exampleField = :val') + // ->setParameter('val', $value) + // ->getQuery() + // ->getOneOrNullResult() + // ; + // } +} diff --git a/templates/artemis/intranet/customer/order-add.twig b/templates/artemis/intranet/customer/order-add.twig index 38490bd..1019d02 100644 --- a/templates/artemis/intranet/customer/order-add.twig +++ b/templates/artemis/intranet/customer/order-add.twig @@ -6,7 +6,7 @@