Advertisement
Guest User

Untitled

a guest
Apr 4th, 2018
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 48.68 KB | None | 0 0
  1. @(user: Utilisateur, date:Date, lots:List[Devi], agences: List[Agence], supplies: List[Fournisseur],ports:List[Port],types:List[TypeContainer],containers:List[Container], daughters: List[Agence])
  2. @import java.util.GregorianCalendar; val cal=new java.util.GregorianCalendar(); val calNext=new java.util.GregorianCalendar();val calPrev=new java.util.GregorianCalendar();val calFd=new java.util.GregorianCalendar();val calCu=new java.util.GregorianCalendar();val calFdM=new java.util.GregorianCalendar();
  3. @cal.setTime(date)
  4. @cal.setFirstDayOfWeek(Calendar.MONDAY)
  5. @calFd.setTime(date)
  6. @calNext.setFirstDayOfWeek(Calendar.MONDAY)
  7. @calPrev.setFirstDayOfWeek(Calendar.MONDAY)
  8. @cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek())
  9. @calFd.set(Calendar.DATE, 1)
  10. @calFd.setMinimalDaysInFirstWeek(1)
  11. @calNext.setTime(date)
  12. @calNext.add(Calendar.MONTH, 1)
  13. @calPrev.setTime(date)
  14. @calPrev.add(Calendar.MONTH, -1)
  15. @calFdM.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE))
  16. @calFdM.set(Calendar.MONTH, cal.get(Calendar.MONTH))
  17. @calFdM.set(Calendar.HOUR, 23)
  18. @calFdM.set(Calendar.MINUTE, 59)
  19. @calFdM.set(Calendar.SECOND, 59)
  20.  
  21. <html>
  22. <head>
  23. <title>Somovers</title>
  24. <meta charset="utf-8" />
  25. <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.ico")">
  26. @views.html.css(request.path())
  27. <style>
  28.  
  29. .quick-modal{
  30. overflow:visible;
  31. }
  32.  
  33. .quick-modal.edit {
  34. width:80% !important;
  35. top: 30px;
  36. }
  37.  
  38. html body section.active footer ul li a.transferCont{
  39. background-color: #5ab75a;
  40. }
  41. </style>
  42. @views.html.javascript(request.path(),user)
  43.  
  44. @helper.javascriptRouter("jsRoutes")(
  45. routes.javascript.EventExploitations.getContainer,
  46. routes.javascript.EventExploitations.AJAX_add,
  47. routes.javascript.EventExploitations.AJAX_edit,
  48. routes.javascript.EventExploitations.AJAX_save,
  49. routes.javascript.EventExploitations.AJAX_validate,
  50. routes.javascript.EventExploitations.AJAX_invalidate,
  51. routes.javascript.EventExploitations.AJAX_send,
  52. routes.javascript.EventExploitations.AJAX_delete
  53. )
  54. </head>
  55. <body>
  56. <header class="topbar">
  57. @views.html.menu(user)
  58. </header>
  59. <main>
  60. <h1>@LANG.get(user.lang,"Planning de gestion des conteneurs en Maritime")</h1>
  61. <div class="buttons">
  62. <a type="button" class="btn btn-info" href="@routes.EventExploitations.planGrouping(calPrev.getTime().format("dd-MM-yyyy"))">@LANG.get(user.lang,"Mois Précédent")</a>
  63. <a type="button" class="btn btn-info" href="@routes.EventExploitations.planGrouping(new Date().format("dd-MM-yyyy"))">@LANG.get(user.lang,"Mois Actuel")</a>
  64. <a type="button" class="btn btn-info" href="@routes.EventExploitations.planGrouping(calNext.getTime().format("dd-MM-yyyy"))">@LANG.get(user.lang,"Mois Suivant")</a><br/>
  65. <div class="form-inline"><input class="datepicker readonly form-control" id="datePlanning" placeholder="@LANG.get(user.lang,"Choisir une date")" required><a type="button" class="btn btn-info" id="goDate" href="">@LANG.get(user.lang,"Voir")</a></div>
  66. </div><!--
  67. --><div class="buttons">
  68. <a href="@routes.EventExploitations.planGroupingImport(cal.getTime().format("dd-MM-yyyy"))" class="btn btn-success">Import</a>
  69. <a id="routier" class="btn btn-primary">@LANG.get(user.lang,"Routier")</a>
  70. <a href="" class="btn btn-primary">@LANG.get(user.lang,"Aérien")</a>
  71. <button class="btn btn-info" id="addCont">@LANG.get(user.lang,"Ajout Conteneur")</button>
  72. </div><!--
  73. --><div class="buttons">
  74. <a class="btn btn-warning" href="@routes.Application.index()">@LANG.get(user.lang,"Retour")</a>
  75. </div>
  76.  
  77. <div class="filters">
  78. @{
  79. PRINT.select(
  80. (() => {
  81. agences.map { agence =>
  82. "<option value='"+agence.idEntreprise+"' class='filtreagence' "+(if(user.appartientAgence(agence)) "selected" else "")+">"+agence.nom+"</option>"
  83. }
  84. })(),
  85. "listAgences",
  86. "listAgences[]",
  87. "",
  88. true,
  89. PRINT.attr("title",LANG.get(user.lang,"Sélectionner les agences")),
  90. PRINT.attr("data-save",""),
  91. PRINT.attr("data-actions-box","true"),
  92. PRINT.attr("data-select-all-text",LANG.get(user.lang,"Toutes")),
  93. PRINT.attr("data-deselect-all-text",LANG.get(user.lang,"Aucune")),
  94. PRINT.attr("data-count-selected-text","{0} "+LANG.get(user.lang,"agence(s) sélectionnée(s)")),
  95. PRINT.attr("data-selected-text-format","count>0"),
  96. PRINT.attr("data-live-search","true")
  97. )
  98. }
  99.  
  100. <span>@LANG.get(user.lang,"Ports de départ") :</span>
  101.  
  102. @{
  103. PRINT.select(
  104. (() => {
  105. ports.map { port =>
  106. "<option value='"+port.idport+"' selected> "+port.libelle+"</option>"
  107. }
  108. })(),
  109. "portDepart",
  110. "portDepart[]",
  111. "",
  112. true,
  113. PRINT.attr("title",LANG.get(user.lang,"Sélectionner les agences")),
  114. PRINT.attr("data-save",""),
  115. PRINT.attr("data-actions-box","true"),
  116. PRINT.attr("data-select-all-text",LANG.get(user.lang,"Tous")),
  117. PRINT.attr("data-deselect-all-text",LANG.get(user.lang,"Aucun")),
  118. PRINT.attr("data-count-selected-text","{0} "+LANG.get(user.lang,"port(s) sélectionné(s)")),
  119. PRINT.attr("data-selected-text-format","count>0"),
  120. PRINT.attr("data-live-search","true")
  121. )
  122. }
  123.  
  124. <span>@LANG.get(user.lang,"Ports d'arrivée") :</span>
  125.  
  126. @{
  127. PRINT.select(
  128. (() => {
  129. ports.map { port =>
  130. "<option value='"+port.idport+"' selected> "+port.libelle+"</option>"
  131. }
  132. })(),
  133. "portArriv",
  134. "portArriv[]",
  135. "",
  136. true,
  137. PRINT.attr("title",LANG.get(user.lang,"Sélectionner les agences")),
  138. PRINT.attr("data-save",""),
  139. PRINT.attr("data-actions-box","true"),
  140. PRINT.attr("data-select-all-text",LANG.get(user.lang,"Tous")),
  141. PRINT.attr("data-deselect-all-text",LANG.get(user.lang,"Aucun")),
  142. PRINT.attr("data-count-selected-text","{0} "+LANG.get(user.lang,"port(s) sélectionné(s)")),
  143. PRINT.attr("data-selected-text-format","count>0"),
  144. PRINT.attr("data-live-search","true")
  145. )
  146. }
  147. </div>
  148.  
  149. <h2>@calFd.getTime().format("MMMM")</h2>
  150.  
  151. @for(agence<-agences){
  152. <div data-id="@agence.idEntreprise" class="planningAgence">
  153. <h3>@agence.nom</h3>
  154. <table class="planningGrp">
  155. @for( i <- 1 to calFd.getActualMaximum(Calendar.WEEK_OF_MONTH)) {
  156. <tr>
  157. <td>
  158. @LANG.get(user.lang,"S")@calFd.get(Calendar.WEEK_OF_YEAR)
  159. </td>
  160. <td>
  161. @containers.map { cont =>
  162. @if(cont.sender.idEntreprise==agence.idEntreprise){
  163. @if(cont.inTheWeek(calFd.get(Calendar.WEEK_OF_YEAR))){
  164. <table class="container" data-id="@cont.id" data-portDep="@cont.origin.idport" data-portArr="@cont.destination.idport" data-supply="@cont.recipient.idFournisseur">
  165. <tr>
  166. <th>@DEF.toPortName(cont.origin.libelle) - @DEF.toPortName(cont.destination.libelle)
  167. <span class="volCont">@cont.amount</span>/<span class="volContMax">@DEF.toInt(cont.typeContainer.volumeMax) </span>m<sup>3</sup>&nbsp;
  168. <div class="current-load">
  169. <div class="progress-bar @if((cont.amount/cont.typeContainer.volumeMax)>1){overload}" style="width: @DEF.toDouble(cont.amountPercent())%;"></div>
  170. </div>
  171. <span class="editCont"><i class="fa fa-2x fa-pencil-square-o" aria-hidden="true" title="@LANG.get(user.lang,"Modifier Conteneur")"></i></span>
  172. @if(cont.state.equals(DEF.STATE_PENDING)){
  173. <span class="validCont"><i class="fa fa-2x fa-check" aria-hidden="true" title="@LANG.get(user.lang,"Confirmer le Conteneur")"></i></span>
  174. }
  175. @if(cont.state.equals(DEF.STATE_CONFIRMATED)){
  176. <span class="invalidCont"><i class="fa fa-2x fa-times" aria-hidden="true" title="@LANG.get(user.lang,"Déconfirmer le Conteneur")"></i></span>
  177. <span class="areaCont"><a href="@routes.EventExploitations.containerArea(cont.id)"><i class="fa fa-2x fa-archive" aria-hidden="true" title="@LANG.get(user.lang,"Espace Conteneur")"></i></a></span>
  178. }
  179. <span class="stateCont" data-state="@cont.state">@LANG.get(user.lang,cont.state)</span>
  180. </th>
  181. </tr>
  182. <tr @if(cont.state.equals(DEF.STATE_SENT)){class="exceed"}>
  183. <td @if(cont.state.equals(DEF.STATE_PENDING)){ondrop="drop(event)" ondragover="allowDrop(event)"} style="height: 1em;">
  184. <ul>
  185. @cont.lots.map { lot =>
  186. <li
  187. class="form-control"
  188. id="@lot.id"
  189. name="lot@lot.id"
  190. data-conf="@if(lot.statut.equals("Confirme")){true}else{false}"
  191. data-portDep="@lot.portDepart.idport"
  192. data-portArr="@lot.portArrive.idport"
  193. @if(cont.state.equals(DEF.STATE_PENDING)){draggable="true" ondragstart="drag(event)"}
  194. data-volume="@lot.volumeEffets"
  195. data-agence="@lot.agence.agenceMere.idEntreprise"
  196. data-cont="@cont.id"
  197. data-odl="@if(!lot.validSupplier()){true}"
  198. title="Date: @lot.getDeliveryDate() <br/> @LANG.get(user.lang,"Départ/Arrivée"): @lot.portDepart.adressePort.ville.ville_nom_reel &rarr; @lot.portArrive.adressePort.ville.ville_nom_reel"
  199. readonly>
  200. @lot.dossier.demenage.personne.nom - @lot.volumeEffets - @lot.agence.nom @if(!lot.validSupplier()){<span class='fa fa-xs fa-exclamation-triangle warning' title='@LANG.get(user.lang,"ODL inexistante pour ce fournisseur")'></span>}
  201. </li>
  202. }
  203. </ul>
  204. </td>
  205. </tr>
  206. </table>
  207. }
  208. }
  209. }
  210. </td>
  211. </tr>
  212. @calFd.add(Calendar.WEEK_OF_MONTH,1)
  213. }
  214. </table>
  215. </div>
  216. @calFd.setTime(date)
  217. @calFd.set(Calendar.DATE, 1)
  218. }
  219. </main>
  220.  
  221. <aside id="folderList">
  222. <aside>@LANG.get(user.lang,"Dossiers")</aside>
  223. <div class="legend">
  224. <div></div><span>@LANG.get(user.lang,"Confirmé")</span>
  225. <div></div><span>@LANG.get(user.lang,"Potentiel")</span>
  226. </div>
  227. <input type="text" class="form-control" ondrop="drop(event)" placeholder="@LANG.get(user.lang,"Rechercher un dossier")">
  228. <ul ondrop="drop(event)" ondragover="allowDrop(event)">
  229. @lots.map { lot =>
  230. <li
  231. id="@lot.id"
  232. name="lot@lot.id"
  233. data-conf="@if(lot.statut.equals("Confirme")){true}else{false}"
  234. data-portDep="@lot.portDepart.idport"
  235. data-portArr="@lot.portArrive.idport"
  236. draggable="@if(lot.statut.equals("Confirme")){true}else{false}"
  237. ondragstart="drag(event)"
  238. data-volume="@lot.volumeEffets"
  239. data-agence="@lot.agence.agenceMere.idEntreprise"
  240. data-cont=""
  241. data-odl=""
  242. title="Date: @lot.getDeliveryDate() <br /> @LANG.get(user.lang,"Départ/Arrivée"): @lot.portDepart.adressePort.ville.ville_nom_reel &rarr; @lot.portArrive.adressePort.ville.ville_nom_reel">
  243. @lot.dossier.demenage.personne.nom - @lot.volumeEffets - @lot.agence.nom
  244. </li>
  245. }
  246. </ul>
  247. </aside>
  248.  
  249. <footer>
  250. @views.html.footer(user)
  251. </footer>
  252.  
  253.  
  254.  
  255. <script>
  256.  
  257. $(function(){
  258. var ajaxencours=false;
  259.  
  260. var contModal;var contTimer = 0;
  261.  
  262. $('#addCont').on('click',function(){
  263. contModal = $(this).quickModal({
  264. isForm: true,
  265. form: {
  266. action: '#',
  267. method: 'POST',
  268. id: 'contForm',
  269. submit: 'Ajouter'
  270. },
  271. closeText: 'Annuler',
  272. header: '<h4 class="modal-title">Ajouter un conteneur</h4>',
  273. body: [
  274. {
  275. type: 'form',
  276. label: 'Type',
  277. name: 'typeCont',
  278. tag: 'select',
  279. id: 'typeCont',
  280. classes: [
  281. 'form-control'
  282. ],
  283. options: [
  284. @for(typeC<-types){
  285. {value: '@typeC.idtypeContainer', text: '@if(typeC.libelle.equals("High Cube")){TC 40 HC}else{@typeC.libelle}', selected: false, attributes: {'data-volume': '@typeC.volumeMax'}},
  286. }
  287. ],
  288. attributes: {}
  289. },
  290. {
  291. type: 'form',
  292. label: 'Agence',
  293. name: 'agenceCont',
  294. tag: 'select',
  295. id: 'agenceCont',
  296. classes: [
  297. 'form-control'
  298. ],
  299. options: [
  300. @for(agence<-agences){
  301. {value: '@agence.idEntreprise', text: '@agence.nom', selected: false},
  302. }
  303. ],
  304. attributes: {}
  305. },
  306. {
  307. type: 'form',
  308. label: 'Fournisseur',
  309. name: 'recipientCont',
  310. tag: 'select',
  311. id: 'recipientCont',
  312. classes: [
  313. 'form-control'
  314. ],
  315. options: [
  316. @for(supply<-supplies){
  317. {value: '@supply.idFournisseur', text: '@supply.entreprise.nom', selected: false, attributes: {'data-entreprise': '@supply.listAgencies()'}},
  318. }
  319. ],
  320. attributes: {}
  321. },
  322. {
  323. type: 'form',
  324. label: 'Origine',
  325. name: 'origin',
  326. tag: 'select',
  327. id: 'origin',
  328. classes: [
  329. 'selectpicker'
  330. ],
  331. options: [
  332. @for(port<-ports){
  333. {value: '@port.idport', text: '@port.libelle', selected: false},
  334. }
  335. ],
  336. attributes: {
  337. 'data-live-search':'true'
  338. }
  339. },
  340. {
  341. type: 'form',
  342. label: 'Destination',
  343. name: 'destination',
  344. tag: 'select',
  345. id: 'destination',
  346. classes: [
  347. 'selectpicker'
  348. ],
  349. options: [
  350. @for(port<-ports){
  351. {value: '@port.idport', text: '@port.libelle', selected: false},
  352. }
  353. ],
  354. attributes: {
  355. 'data-live-search':'true'
  356. }
  357. },
  358. {
  359. type: 'form',
  360. label: 'Période d\'envoi',
  361. name: 'dateCont',
  362. id: 'dateCont',
  363. tag: 'input',
  364. classes: [
  365. 'form-control',
  366. 'datepicker',
  367. 'readonly'
  368. ],
  369. attributes: {
  370. 'data-live-search':'true',
  371. 'required':'true',
  372. 'starts-monday':''
  373. }
  374. }
  375. ],
  376. footer: [
  377. {
  378. text: 'Annuler',
  379. href: '#',
  380. classes: [
  381. 'quick-modal-shut',
  382. 'quick-modal-close'
  383. ]
  384. }
  385. ],
  386. afterOpen: function(modal) {
  387. contTimer = Date.now();
  388. refreshdatepickers();
  389. var currentagency= $("#agenceCont").val();
  390. $("#recipientCont option").hide();
  391. $("#recipientCont option[data-entreprise*='"+currentagency+"']").show();
  392. $(".selectpicker").selectpicker();
  393. $('#typeCont, #dateCont').css('width','40%');
  394. $('form .selectpicker').parent().css({'width':'290px','padding-left':'20px'});
  395.  
  396. var tabAdd = $('<table>').addClass("table");
  397. var bdAdd = $('<tbody>');
  398. $("form section p").each(function(){
  399. var rowAdd = $('<tr>');
  400. var colAddL = $('<td>').append($(this).children().first());
  401. var colAddV = $('<td>');
  402. var div = $('<div>').addClass("form-group");
  403. div.append($(this).children().last());
  404. colAddV.append(div);
  405. rowAdd.append(colAddL);
  406. rowAdd.append(colAddV);
  407. bdAdd.append(rowAdd);
  408. });
  409. tabAdd.append(bdAdd);
  410. $("form section").append(tabAdd);
  411. $("form section p").remove();
  412.  
  413. $("#agenceCont").change(function(){
  414. var idagency= $(this).val();
  415. $("#recipientCont option").hide();
  416. $("#recipientCont option[data-entreprise*='"+idagency+"']").show();
  417. /* $("#recipientCont option").each(function(){
  418. if(idagency==$(this).attr('data-entreprise')) $(this).show();
  419. }); */
  420. });
  421.  
  422. //Disable modal
  423. $("#addCont").prop('disabled',true);
  424. $(".editCont").css('pointer-events','none');
  425. $(".quick-modal").on("remove", function () {
  426. $("#addCont").prop('disabled',false);
  427. $(".editCont").css('pointer-events','auto');
  428. })
  429.  
  430. },
  431. onSubmit: function(e, form) {
  432. e.preventDefault();
  433. var promise = new Promise(function(resolve,reject){
  434. var ajaxCallBack = {
  435. data : {
  436. typeCont: $('[name="typeCont"]',form).val(),
  437. agenceCont: $('[name="agenceCont"]',form).val(),
  438. recipient: $('[name="recipientCont"]',form).val(),
  439. origin: $('[name="origin"]',form).val(),
  440. destination: $('[name="destination"]',form).val(),
  441. dateCont: $('[name="dateCont"]',form).val(),
  442. historyTimer: Date.now() - contTimer
  443. },
  444. dataType: "json",
  445. beforeSend : function() {
  446. ajaxencours=true;
  447. },
  448. success : function(data) {
  449. if(data){
  450. contModal.destroy();
  451. window.location.reload();
  452. }
  453. else{
  454. alert('Erreur lors de l\'enregistrement.');
  455. }
  456. LOADER.removeClass('active');
  457. resolve();
  458. ajaxencours=false;
  459. },
  460. error : function(error) {
  461. ajaxencours=false;
  462. var response = $(error.responseText);
  463. err(error);
  464. LOADER.removeClass('active');
  465. resolve();
  466. }
  467. }
  468. LOADER.addClass('active');
  469. jsRoutes.controllers.EventExploitations.AJAX_add().ajax(ajaxCallBack);
  470. })
  471. .then(function(){
  472. return false;
  473. });
  474. }
  475. });
  476. });
  477.  
  478.  
  479.  
  480.  
  481. $('.editCont').on('click',function(){
  482. var idcont= $(this).closest('.container').attr('data-id');
  483. var tabCont = $(this).closest('.container');
  484. var valid= false;
  485. if($(this).nextAll(".stateCont").text()=="@DEF.STATE_CONFIRMATED")valid=true;
  486. var ajaxCallBack = {
  487. data : "id="+idcont,
  488. dataType: "json",
  489. beforeSend : function() {
  490. ajaxencours=true;
  491. },
  492. success : function(data) {
  493. var cont=JSON.parse(data.cont);
  494. var supplies=JSON.parse(data.supply);
  495. var supplyD=JSON.parse(data.supplyD);
  496. contModal = $(this).quickModal({
  497. isForm: true,
  498. form: {
  499. action: '#',
  500. method: 'POST',
  501. id: 'contForm',
  502. submit: 'Modifier'
  503. },
  504. closeText: 'Annuler',
  505. header: '<h4 class="modal-title">Edition du conteneur</h4>',
  506. body: [
  507. {
  508. type: 'form',
  509. label: 'Numéro de conteneur',
  510. inputType: 'text',
  511. name: 'number',
  512. value: cont.num,
  513. tag: 'input',
  514. id: 'number',
  515. classes: [
  516. 'form-control'
  517. ],
  518. },
  519. {
  520. type: 'form',
  521. label: 'Numéro de plomb',
  522. inputType: 'text',
  523. name: 'numberLead',
  524. value: cont.numLead,
  525. tag: 'input',
  526. id: 'numberLead',
  527. classes: [
  528. 'form-control'
  529. ],
  530. },
  531. {
  532. type: 'form',
  533. label: 'Type',
  534. name: 'typeCont',
  535. tag: 'select',
  536. id: 'typeCont',
  537. classes: [
  538. 'form-control'
  539. ],
  540. options: [
  541. @for(typeC<-types){
  542. {value: '@typeC.idtypeContainer', text: '@if(typeC.libelle.equals("High Cube")){TC 40 HC}else{@typeC.libelle}',
  543. selected: false, attributes: {'data-volume': '@typeC.volumeMax'}},
  544. }
  545. ],
  546. attributes: {}
  547. },
  548. {
  549. type: 'form',
  550. label: 'Agence',
  551. name: 'agenceCont',
  552. tag: 'select',
  553. id: 'agenceCont',
  554. classes: [
  555. 'form-control'
  556. ],
  557. options: [
  558. @for(agence<-agences){
  559. {value: '@agence.idEntreprise', text: '@agence.nom', selected: false},
  560. }
  561. ],
  562. attributes: {}
  563. },
  564. {
  565. type: 'form',
  566. label: 'Origine',
  567. name: 'origin',
  568. tag: 'select',
  569. id: 'origin',
  570. classes: [
  571. 'selectpicker'
  572. ],
  573. options: [
  574. @for(port<-ports){
  575. {value: '@port.idport', text: '@port.libelle', selected: false},
  576. }
  577. ],
  578. attributes: {
  579. 'data-live-search':'true'
  580. }
  581. },
  582. {
  583. type: 'form',
  584. label: 'Destination',
  585. inputType: 'text',
  586. name: 'destination',
  587. value: cont.destination.libelle,
  588. tag: 'input',
  589. id: 'destination',
  590. classes: [
  591. 'form-control',
  592. 'readonly'
  593. ],
  594. },
  595. {
  596. type: 'form',
  597. label: 'Période d\'envoi',
  598. name: 'dateCont',
  599. id: 'dateCont',
  600. value: dateToString(stringToDate(cont.period)),
  601. tag: 'input',
  602. classes: [
  603. 'form-control',
  604. 'datepicker',
  605. 'readonly'
  606. ],
  607. attributes: {
  608. 'data-live-search':'true',
  609. 'required':'true',
  610. 'starts-monday':''
  611. }
  612. },
  613. {
  614. type: 'form',
  615. label: 'Fournisseur',
  616. name: 'recipient',
  617. tag: 'select',
  618. id: 'recipient',
  619. classes: [
  620. 'selectpicker'
  621. ],
  622. options: [
  623. ],
  624. attributes: {
  625. 'data-live-search':'true'
  626. }
  627. },
  628. {
  629. type: 'form',
  630. label: 'Agence',
  631. name: 'agencyTf',
  632. tag: 'select',
  633. id: 'agencyTf',
  634. classes: [
  635. 'form-control'
  636. ],
  637. options: [],
  638. attributes: {}
  639. }
  640. ],
  641. footer: [
  642. {
  643. text: 'Fermer',
  644. href: '#',
  645. classes: [
  646. 'quick-modal-shut',
  647. 'quick-modal-close'
  648. ]
  649. },
  650. {
  651. text: 'Supprimer',
  652. href: '#',
  653. id: idcont,
  654. classes: [
  655. 'quick-modal-remove',
  656. 'deleteCont'
  657. ]
  658. },
  659. {
  660. text: 'Transférer',
  661. href: '#',
  662. classes: [
  663. 'transferCont'
  664. ]
  665. }
  666.  
  667. ],
  668. afterOpen: function(modal) {
  669. $("section.quick-modal").addClass("edit");
  670. contTimer = Date.now();
  671. refreshdatepickers();
  672. $('[name="typeCont"]').val(cont.typeContainer.idtypeContainer);
  673. $('[name="agenceCont"]').val(cont.sender.idEntreprise);
  674. $('[name="origin"]').val(cont.origin.idport);
  675. for(var i=0;i<supplies.length;i++){
  676. var option= $('<option>').text(supplies[i].entreprise.nom);
  677. option.val(supplies[i].idFournisseur);
  678. var idagencies="";
  679. for(var j=0;j<supplies[i].entreprise.agencesMere.length;j++){
  680. idagencies+= supplies[i].entreprise.agencesMere[j].idEntreprise+",";
  681. }
  682. option.attr({"data-entreprise":idagencies,"data-parent":supplies[i].entreprise.idEntreprise,"data-interco":supplies[i].entreprise.codeEntreprise.agcFourn,});
  683. $('#recipient').append(option);
  684. }
  685. $("#recipient option").hide();
  686. $("#recipient option[data-entreprise*='"+cont.sender.idEntreprise+"']").show();
  687. $('#recipient').val(cont.recipient.idFournisseur);
  688. $(".selectpicker").selectpicker();
  689. $('form .selectpicker').parent().css({'width':'100%','padding-left':'20px'});
  690. $('.transferCont').hide();
  691. $('form section').children().wrapAll("<div id='accordion'></div>");
  692. $('#accordion').prepend("<h3>Modification Conteneur</h3><div id='modifCont'></div><h3>Rentabilité</h3><div id='profit'></div>"
  693. +"<h3>Instructions</h3><div id='directives'></div><h3>Transfert Agence</h3><div id='transfer'></div>");
  694. $("#accordion h3").css("color","#333");
  695. $('#modifCont').prepend($("#accordion p:lt(7)"));
  696. $('#transfer').prepend($("#accordion > p"));
  697. $( "#accordion" ).accordion({
  698. heightStyle: "content"
  699. });
  700.  
  701. $('#modifCont').css("overflow","initial");
  702. $('#transfer').css("overflow","initial");
  703. if(valid){
  704. $("#typeCont,#agenceCont").each(function(){
  705. $(this).css('pointer-events','none');
  706. });
  707. $('#origin').parent().css('pointer-events','none');
  708. $("#dateCont").attr("disabled",true);
  709. $('.transferCont').show();
  710. }
  711.  
  712. var tabEdit = $('<table>').addClass("table");
  713. var bdEdit = $('<tbody>');
  714. $("#modifCont p").each(function(){
  715. var rowEdit = $('<tr>');
  716. var colEditL = $('<td>').css("width","35%").append($(this).children().first());
  717. var colEditV = $('<td>');
  718. var div = $('<div>').addClass("form-group");
  719. div.append($(this).children().last());
  720. colEditV.append(div);
  721. rowEdit.append(colEditL);
  722. rowEdit.append(colEditV);
  723. bdEdit.append(rowEdit);
  724. });
  725. tabEdit.append(bdEdit);
  726. $("#modifCont").append(tabEdit);
  727. $("#modifCont p").remove();
  728.  
  729.  
  730.  
  731. var table = $('<table>');
  732. var rowTh = $('<tr>');
  733. //Th init
  734. var thMargin = $('<th>');
  735. rowTh.append(thMargin);
  736. var index=0;
  737. for(var i=0;i<data.libCli.length;i++){
  738. var th = $('<th>').text(data.libCli[i]);
  739. th.addClass("lineProfit");
  740. rowTh.append(th);
  741. index++;
  742. }
  743. table.append(rowTh);
  744.  
  745.  
  746. //Cost column
  747. for(var i=0;i<data.lib.length;i++){
  748. var td = $('<td>').text(data.lib[i]);
  749. var rowLib = $('<tr>');
  750. rowLib.append(td);
  751. table.append(rowLib);
  752. }
  753. $('#profit').prepend(table);
  754.  
  755. for(var j=0;j<data.lines.length;j++){
  756. for(var k=0;k<data.lines[j].length;k++){
  757. var td = $('<td>');
  758. if(data.lines[j][k]!= ""){
  759. td.text(data.lines[j][k]+" €");
  760. }else{
  761. td.text(data.lines[j][k]);
  762. }
  763. $('#profit table tr:nth-child('+(j+2)+')').append(td);
  764. }
  765. }
  766.  
  767. if(data.subD!=null){
  768. var rowSub = $('<tr>');
  769. var titleSub= $('<td>').text();
  770. var titleSub= $('<td>').text('Sous-traitance');
  771. rowSub.append(titleSub);
  772. for(var k=0;k<data.subD.length;k++){
  773. var td = $('<td>');
  774. if(data.subD[k]!= ""){
  775. td.text(data.subD[k]+" €");
  776. }else{
  777. td.text(data.subD[k]);
  778. }
  779. rowSub.append(td);
  780. }
  781. $('#profit table').append(rowSub);
  782. }
  783.  
  784. //purge row
  785. $("#profit table tr:gt(0)").each(function(){
  786. var rownull= 0;
  787. $(this).find("td:gt(0)").each(function(){
  788. if($(this).text()=="" || $(this).text()=="0 €")rownull++;
  789. });
  790. if(rownull==data.libCli.length){
  791. $(this).remove();
  792. }
  793. });
  794.  
  795.  
  796. //Detail column
  797. var total = 0.0;
  798. var trDet = $('<tr>');
  799. var tdDet = $('<td>').text("Détail");
  800. trDet.append(tdDet);
  801. for(var i=0;i<data.ca.length;i++){
  802. var sum =0.0;
  803. $("#profit table tr:gt(0)").each(function(){
  804. if($(this).find("td:eq("+(i+1)+")").text()!=""){
  805. sum+=parseFloat($(this).find("td:eq("+(i+1)+")").text().match(/\d+\.?\d*/));
  806. }
  807. });
  808. total+=sum;
  809. var td = $('<td>').text(sum.toFixed(2)+" €");
  810. trDet.append(td);
  811. }
  812. $('#profit table').append(trDet);
  813.  
  814.  
  815. //C.A row
  816. if(data.ca.length>0){
  817. var trCA = $('<tr>');
  818. var tdCA = $('<td>').text("C.A HT");
  819. trCA.append(tdCA);
  820. $("#profit table tr:first").after(trCA);
  821. var totCA = 0.0;
  822. for(var z=0;z<data.ca.length;z++){
  823. var td = $('<td>').text(data.ca[z]+" €");
  824. $("#profit table tr:eq(1)").append(td);
  825. totCA+=parseFloat(data.ca[z]);
  826. }
  827.  
  828. var rowTotal = $('<tr>');
  829. var colSpace = $('<td>').css("visibility","hidden");
  830. var colnumb = $("#profit table").find('tr')[0].cells.length;
  831. var colTotal = $('<td>').attr("colspan",colnumb-1);
  832. colTotal.text(total.toFixed(2)+" €");
  833. rowTotal.append(colSpace);
  834. rowTotal.append(colTotal);
  835. //$("#profit table").append(rowTotal);
  836.  
  837. var thSum = $('<th>').text("Total");
  838. $("#profit table tr:first").append(thSum);
  839. $("#profit table tr:gt(0)").each(function(){
  840. var sum =0.0;
  841. $(this).find("td:gt(0)").each(function(){
  842. if($(this).text()!=""){
  843. sum+=parseFloat($(this).text().match(/\d+\.?\d*/));
  844. }
  845. });
  846. var cellSum = $("<td>").text(sum.toFixed(2)+" €");
  847. $(this).append(cellSum);
  848. });
  849.  
  850.  
  851. var thCost= $('<th>').text("Coûts").css({"background-color":"cornflowerblue","color":"white"});
  852. thCost.attr("colspan",colnumb+1);
  853. var trCost= $('<tr>').append(thCost);
  854. $("#profit table tr:eq(1)").after(trCost);
  855.  
  856. var marg = (1-(total/totCA))*100;
  857. $("#profit table tr:first th:first").text(Math.round(marg)+"%");
  858. }
  859.  
  860. //exceed case
  861. if(tabCont.find("tr:nth-of-type(2).exceed").length){
  862. $("#contForm footer li:lt(2)").remove();
  863. }
  864.  
  865. //Instruction tab
  866. var tabInstruc = $('<table>').css("font-size","14");
  867. tabInstruc.addClass("table");
  868. var thead = $('<thead>');
  869. var trHead= $('<tr>');
  870. trHead.append($('<th>').text("Nom"));
  871. trHead.append($('<th>').text("Nombre de colis"));
  872. trHead.append($('<th>').text("Poids"));
  873. thead.append(trHead);
  874. tabInstruc.append(thead);
  875. var tbody = $('<tbody>');
  876. for(var i=0;i<data.instruc.length;i++){
  877. var row = $('<tr>');
  878. var colName= $('<td>').text(data.instruc[i][0]);
  879. row.append(colName);
  880. for(var k=1;k<data.instruc[i].length;k++){
  881. var colNb = $('<td>');
  882. var div = $('<div>').addClass("form-group");
  883. var input = $('<input>').addClass("form-control").css("margin-left","0");
  884. input.attr({"type":"number","min":"0"});
  885. input.prop('required',true);
  886. if(k==1){
  887. input.attr("name","nbPackage[]");
  888. }else{
  889. input.attr({"name":"weight[]","step":"0.1"});
  890. }
  891. if(data.instruc[i][k]!=null){
  892. input.val(data.instruc[i][k]);
  893. }else{
  894. input.val("0");
  895. }
  896. div.append(input);
  897. colNb.append(div);
  898. row.append(colNb);
  899. }
  900. tbody.append(row);
  901. }
  902. tabInstruc.append(tbody);
  903. $('#directives').prepend(tabInstruc);
  904.  
  905. $("#agenceCont").change(function(){
  906. var idagency= $(this).val();
  907. $("#recipient option").hide();
  908. $("#recipient option[data-entreprise*='"+idagency+"']").show();
  909. });
  910.  
  911. //Transfer
  912. if(!cont.recipient.entreprise.codeEntreprise.agcFourn){
  913. $("#agencyTf").parent().hide();
  914. $(".transferCont").text("Envoyer");
  915. }else{
  916. for(var i=0;i<supplyD.length;i++){
  917. var opt= $("<option>").text(supplyD[i].nom);
  918. opt.val(supplyD[i].idEntreprise);
  919. $("#agencyTf").append(opt);
  920. }
  921. if(cont.recipAgency!=null)$("#agencyTf").val(cont.recipAgency.idEntreprise);
  922. }
  923.  
  924. $("#recipient").change(function(){
  925. $("#agencyTf").empty();
  926. $("#agencyTf").parent().hide();
  927. $(".transferCont").text("Envoyer");
  928. if($("option:selected",this).attr('data-interco')=="true"){
  929. var notEmpty= false;
  930. var parent = $("option:selected",this).attr('data-parent');
  931. @for(agency <- daughters){
  932. @if(agency.entrepriseParente!=null){
  933. if(parent==@agency.entrepriseParente.idEntreprise){
  934. var opt= $("<option>").text("@agency.nom");
  935. opt.val(@agency.idEntreprise);
  936. $("#agencyTf").append(opt);
  937. notEmpty=true;
  938. }
  939. }
  940. }
  941. if(notEmpty){
  942. $("#agencyTf").parent().show();
  943. $(".transferCont").text("Transférer");
  944. }
  945. }
  946. });
  947.  
  948. //Disable modal
  949. $("#addCont").prop('disabled',true);
  950. $(".editCont").css('pointer-events','none');
  951. $(".quick-modal").on("remove", function () {
  952. $("#addCont").prop('disabled',false);
  953. $(".editCont").css('pointer-events','auto');
  954. })
  955. },
  956. onSubmit: function(e, form) {
  957. e.preventDefault();
  958. var promise = new Promise(function(resolve,reject){
  959. var nbPack=[]; var weight=[];
  960. $('[name="nbPackage[]"]').each(function(){
  961. nbPack.push($(this).val());
  962. });
  963. $('[name="weight[]"]').each(function(){
  964. weight.push($(this).val());
  965. });
  966. var ajaxCallBack2 = {
  967. data : {
  968. idCont: idcont,
  969. number: $('[name="number"]',form).val(),
  970. numberLead: $('[name="numberLead"]',form).val(),
  971. typeCont: $('[name="typeCont"]',form).val(),
  972. agenceCont: $('[name="agenceCont"]',form).val(),
  973. origin: $('[name="origin"]',form).val(),
  974. dateCont: $('[name="dateCont"]',form).val(),
  975. recipient: $('[name="recipient"]',form).val(),
  976. agency: $('[name="agencyTf"]',form).val(),
  977. nbPackage: nbPack,
  978. weight: weight,
  979. margin: parseInt($("#profit table tr:first th:first").text().match(/\d+/)),
  980. historyTimer: Date.now() - contTimer
  981. },
  982. dataType: "json",
  983. success : function(data) {
  984. if(data){
  985. contModal.destroy();
  986. window.location.reload();
  987. }
  988. else{
  989. alert('Erreur lors de l\'enregistrement.');
  990. }
  991. LOADER.removeClass('active');
  992. resolve();
  993. },
  994. error : function(error) {
  995. var response = $(error.responseText);
  996. err(error);
  997. LOADER.removeClass('active');
  998. resolve();
  999. }
  1000. }
  1001. LOADER.addClass('active');
  1002. jsRoutes.controllers.EventExploitations.AJAX_edit().ajax(ajaxCallBack2);
  1003. })
  1004. .then(function(){
  1005. return false;
  1006. });
  1007. }
  1008. });
  1009. ajaxencours=false;
  1010. },
  1011. error : function(error) {
  1012. ajaxencours=false;
  1013. err(error);
  1014. }
  1015. }
  1016. jsRoutes.controllers.EventExploitations.getContainer().ajax(ajaxCallBack);
  1017. });
  1018.  
  1019.  
  1020. });
  1021.  
  1022.  
  1023.  
  1024.  
  1025. $('body').on('click','.deleteCont',function(){
  1026. if(confirm("Voulez-vous supprimer ce conteneur ?")){
  1027. var idcont= $(this).parent().attr('id');
  1028. var ajaxCallBack = {
  1029. data : "id="+idcont,
  1030. dataType: "json",
  1031. success : function(data) {
  1032. if(!data){
  1033. alert('Erreur lors de la suppression.');
  1034. }else{
  1035. window.location.reload();
  1036. }
  1037. },
  1038. error : function(error) {
  1039. err(error);
  1040. }
  1041. }
  1042. jsRoutes.controllers.EventExploitations.AJAX_delete().ajax(ajaxCallBack);
  1043. }
  1044. });
  1045.  
  1046.  
  1047. $('body').on('click','.transferCont',function(){
  1048. var idcont= $(this).parent().prev().attr('id');
  1049. var idsupply= $("#recipient").val();
  1050. var idagency= $("#agencyTf").val();
  1051. var ajaxCallBack = {
  1052. data : "id="+idcont+"&recipient="+idsupply+"&agency="+idagency,
  1053. dataType: "json",
  1054. success : function(data) {
  1055. if(data!=""){
  1056. alert(data);
  1057. }else{
  1058. window.location.reload();
  1059. }
  1060. },
  1061. error : function(error) {
  1062. err(error);
  1063. }
  1064. }
  1065. jsRoutes.controllers.EventExploitations.AJAX_send().ajax(ajaxCallBack);
  1066. });
  1067.  
  1068. function getWeekNumber(d) {
  1069. d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
  1070. d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
  1071. var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
  1072. var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
  1073. return weekNo;
  1074. }
  1075.  
  1076. function addContainer(){
  1077. var table = $('<table>').css({"width":"90%","margin-bottom":"20px"});
  1078. var rowTh = $('<tr>');
  1079. var th = $('<th>').html($("#typeCont option:selected").text()+" &nbsp; Volume: ");
  1080. var spanVol = $('<span>').text("0");
  1081. spanVol.addClass("volCont");
  1082. var spanVolMax = $('<span>').text(parseInt($("#typeCont option:selected").attr("data-volume")));
  1083. spanVolMax.addClass("volContMax");
  1084.  
  1085. var divPbar= $('<div>').addClass("w3-light-grey w3-round-xlarge");
  1086. divPbar.css({"width":"15%","display":"inline-block"});
  1087. var Pbar= $('<div>').addClass("w3-container w3-blue w3-round-xlarge");
  1088. Pbar.css("width","0%");
  1089. divPbar.append(Pbar);
  1090.  
  1091. var spanEdit = $('<span>').addClass("editCont");
  1092. var i = $('<i>').addClass("fa fa-2x fa-pencil-square-o");
  1093. i.attr("aria-hidden","true");
  1094. spanEdit.append(i);
  1095. th.append(spanVol," /",spanVolMax,"m<sup>3</sup> &nbsp;",divPbar,spanEdit);
  1096.  
  1097. var rowDrop = $('<tr>');
  1098. var td = $('<td>').text(" ");
  1099. td.css("height","1em");
  1100. td.attr({"ondrop":"drop(event)","ondragover":"allowDrop(event)"});
  1101. rowTh.append(th);
  1102. rowDrop.append(td);
  1103. table.append(rowTh,rowDrop);
  1104. table.addClass("container");
  1105.  
  1106. tab = $("#dateCont").val().split("/");
  1107. var dateModal = stringToDate(tab[1]+"/"+tab[0]+"/"+tab[2]);
  1108. var week = getWeekNumber(dateModal);
  1109. $('.listContainer [data-week="'+week+'"]').append(table);
  1110. };
  1111.  
  1112. function pad(d) {
  1113. return (d < 10) ? '0' + d.toString() : d.toString();
  1114. }
  1115.  
  1116.  
  1117. </script>
  1118. <script language="JavaScript" type="text/JavaScript">
  1119.  
  1120.  
  1121. /*$("#routier").click( function(){
  1122. window.location.reload();
  1123. });*/
  1124.  
  1125. function refreshChangeDate(){
  1126. $("#dateDebut").unbind("change");
  1127. $("#dateDebut").change(function(){
  1128. var dates=$(this).val().split("/");
  1129. var dateDeb=new Date(dates[2],(dates[1]-1),dates[0]);
  1130. dates=$("#dateFin").val().split("/");
  1131. var dateFin=new Date(dates[2],(dates[1]-1),dates[0]);
  1132. if(dateFin.getTime()<dateDeb.getTime()){
  1133. $("#dateFin").val($(this).val());
  1134. }
  1135. });
  1136. }
  1137.  
  1138. $("#datePlanning").change(function(){
  1139. var date=$(this).val().replace("/","-").replace("/","-");
  1140. $("#goDate").attr("href","/planGrouping/"+date);
  1141. });
  1142. </script>
  1143. </body>
  1144. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement