293 Commits

Author SHA1 Message Date
d7a2fb5494 YAXX#91339 in de grouped fiatteringslijst door kunnen klikken naar de gescopede zoekpagina
svn path=/Website/trunk/; revision=71148
2025-12-04 12:57:50 +00:00
Jos Groot Lipman
a6d4e9ad91 MARX#88963 Betere ondersteuning XMLtoJsDate voor datums met milliseconden én tijdzones
svn path=/Website/trunk/; revision=71141
2025-12-03 16:33:26 +00:00
Erik Groener
371daa147c YKPN#88810 Uitschakelen van het kunnen boeken van facturen op een contract
svn path=/Website/trunk/; revision=71140
2025-12-03 15:38:24 +00:00
Jos Groot Lipman
18eac1490c FCLT#89391 Rapport export naar Excel faalt bij trema's in rapportnaam
svn path=/Website/trunk/; revision=71129
2025-12-03 12:23:17 +00:00
374c844127 SUTF#91748 (Mobile) voor onderdelen-lijsten en lijsten met gerelateerde onderdelen; standplaats niet in acht nemen
svn path=/Website/trunk/; revision=71125
2025-12-03 09:52:28 +00:00
Maykel Geerdink
1c4f2b313b MARX#90078: Opdracht-actiestatus via API1 bij 'onderbroken/AFR' bij de (FO)BO kunnen zetten.
svn path=/Website/trunk/; revision=71124
2025-12-03 09:22:09 +00:00
Erik Groener
9517935e17 YKPN#88810 Uitschakelen van het kunnen boeken van facturen op een contract
svn path=/Website/trunk/; revision=71123
2025-12-03 09:05:58 +00:00
Maykel Geerdink
6ffd381e67 MARX#90078: Opdracht-actiestatus via API1 bij 'onderbroken/AFR' bij de (FO)BO kunnen zetten.
svn path=/Website/trunk/; revision=71118
2025-12-02 15:53:10 +00:00
Maykel Geerdink
7179a7d07b SGGR#90860: PUT /api2/objects/33444.json eindigt met 404 status.
svn path=/Website/trunk/; revision=71105
2025-12-01 14:33:53 +00:00
Maykel Geerdink
0afeb680ca SGGR#90860: PUT /api2/objects/33444.json eindigt met 404 status.
svn path=/Website/trunk/; revision=71104
2025-12-01 14:29:37 +00:00
Erik Groener
591fa3f970 FMHN#89244 Verzoek om functionaliteit "Ingevoerd door" bij reserveringen toevoegen
svn path=/Website/trunk/; revision=71083
2025-11-28 09:22:05 +00:00
Erik Groener
292eba1e10 YASK#88950 Verplichte velden bij wijziging opdrachttype ontbreken waarschuwing
svn path=/Website/trunk/; revision=71075
2025-11-27 13:03:58 +00:00
Erik Groener
2154db4a27 MENZ#87867 Werkplek lijkt dubbel bezet
svn path=/Website/trunk/; revision=71072
2025-11-27 11:05:30 +00:00
Maykel Geerdink
4790ab0360 HGCU#91616: View ctr_v_monthly_recurring_tasks aanpassen i.v.m. foutieve status in jaaroverzicht voor periodieke check ADS meldingen.
svn path=/Website/trunk/; revision=71069
2025-11-27 08:42:32 +00:00
Erik Groener
43bfa187fc FCLT#76850 Automatisch opruimen backupfiles van imports
svn path=/Website/trunk/; revision=71064
2025-11-26 15:42:40 +00:00
Jos Groot Lipman
e7f0a9a897 FCLT#91443 Ook loading="lazy" op alle bb-plaatjes. Kan een beetje onnodig dataverkeer schelen.
svn path=/Website/trunk/; revision=71058
2025-11-26 12:04:31 +00:00
Maykel Geerdink
86361747ef AAGN#88039: Performance issue bij assetmanagement en draaien/exporteren taken-overzicht.
svn path=/Website/trunk/; revision=71055
2025-11-26 08:34:08 +00:00
Maykel Geerdink
646d29e229 LOGC#90742: Rapportagekolommen verslepen in plaats van volgnummer invoeren.
svn path=/Website/trunk/; revision=71053
2025-11-25 15:17:50 +00:00
Erik Groener
f356b4b9fb DHLD#91573 AiAi alg_key should be integer op mld_object.asp
svn path=/Website/trunk/; revision=71051
2025-11-25 13:35:32 +00:00
Maykel Geerdink
7fa36d7df3 LOGC#90742: Rapportagekolommen verslepen in plaats van volgnummer invoeren.
svn path=/Website/trunk/; revision=71049
2025-11-25 10:04:31 +00:00
Erik Groener
139b7ded01 FCLT#91046 LCL's zijn HTML safe maar niet String-safe of SQL-safe
svn path=/Website/trunk/; revision=71041
2025-11-24 15:49:07 +00:00
Erik Groener
9c10b5fb40 UWVA#90438 Extra tekst toevoegen bij bestaande reservering(en) bij reservering via QR-code
svn path=/Website/trunk/; revision=71035
2025-11-24 10:35:34 +00:00
Erik Groener
8a44183852 UWVA#90437 QR-code boeking niet beschikbaar ruimte
svn path=/Website/trunk/; revision=71033
2025-11-24 10:09:48 +00:00
3d6b0d3462 FCLT#74626 onnodige string delimiter weggehaald
svn path=/Website/trunk/; revision=71028
2025-11-21 12:35:24 +00:00
Erik Groener
3b213b9f5b MARX#86936 Automatisch resizen van API-afbeeldingen in bijlages
svn path=/Website/trunk/; revision=71025
2025-11-21 08:02:21 +00:00
9b731c4642 FCLT#91311 Van deze PoC niets mee-leveren; security risk ivm onderhoudsachterstand
svn path=/Website/trunk/; revision=71015
2025-11-20 11:05:20 +00:00
ecc0218c43 FCLT#91143 Als je antwoordt op een verborgen notitie, dan moeten de icoontjes juist mee-togglen (onzichtbaar worden), zo ook het belletje
svn path=/Website/trunk/; revision=71014
2025-11-20 10:04:45 +00:00
Erik Groener
41ae4148cc FCLT#87560 Dubbele vermeldingen in fiatteringsoverzicht door MLDUPD tracking
svn path=/Website/trunk/; revision=71004
2025-11-19 13:28:13 +00:00
Jos Groot Lipman
449060b413 FCLT#91143 Sinds UWVA#87948 is UWV Vinder en IE11 niet meer in gebruik
svn path=/Website/trunk/; revision=70999
2025-11-19 08:58:51 +00:00
Erik Groener
2c47223b45 FCLT#91046 LCL's zijn HTML safe maar niet String-safe of SQL-safe
svn path=/Website/trunk/; revision=70998
2025-11-19 08:52:18 +00:00
Jos Groot Lipman
18f0517d99 FCLT#72726 /.well-known/security.txt toevoegen
svn path=/Website/trunk/; revision=70992
2025-11-18 16:01:04 +00:00
Erik Groener
05748d1de7 VLKC#89941 Optie voor uitklapbaar opmerkingenveld leverancierssysteem?
svn path=/Website/trunk/; revision=70989
2025-11-18 14:02:36 +00:00
Erik Groener
9ab731bd1f VLKC#89941 Optie voor uitklapbaar opmerkingenveld leverancierssysteem?
svn path=/Website/trunk/; revision=70986
2025-11-18 13:14:03 +00:00
d1767e8d6c FCLT#91143 oude typo
svn path=/Website/trunk/; revision=70984
2025-11-18 12:04:01 +00:00
59c9e6e337 Merge 2025.4 RC1 patches
svn path=/Website/trunk/; revision=70970
2025-11-17 16:25:29 +00:00
Erik Groener
a51b813142 UWVA#90437 QR-code boeking niet beschikbaar ruimte
svn path=/Website/trunk/; revision=70954
2025-11-17 09:33:24 +00:00
Erik Groener
ed0e0728f9 FCLT#91403 Locatie info op de kaart
svn path=/Website/trunk/; revision=70943
2025-11-14 10:01:09 +00:00
2c0b703192 FCLT#91143 ongebruikte functies verwijderd
svn path=/Website/trunk/; revision=70931
2025-11-13 13:49:41 +00:00
Erik Groener
38924f71c9 FZKH#91268 Optie 'Verwijderen' ontbreekt bij opdrachten onder sjabloon-melding in Facilitor
svn path=/Website/trunk/; revision=70925
2025-11-13 09:44:15 +00:00
Maykel Geerdink
819119b93c PNBR#91442 Twee harde teksten in bestand "bes_voorraad_search.asp" vervangen door LCL.
svn path=/Website/trunk/; revision=70910
2025-11-12 11:40:15 +00:00
Maykel Geerdink
6d72043bfa PNBR#91355: Foutmelding bij openen bestelvoorraad via menubalk.
svn path=/Website/trunk/; revision=70909
2025-11-12 11:32:38 +00:00
5abf1bbc8d Merge 2025.4 RC1 patches (ongoing)
svn path=/Website/trunk/; revision=70907
2025-11-12 11:05:09 +00:00
Erik Groener
094169cb2f FZKH#91268 Optie 'Verwijderen' ontbreekt bij opdrachten onder sjabloon-melding in Facilitor
svn path=/Website/trunk/; revision=70903
2025-11-12 09:29:36 +00:00
Maykel Geerdink
e2988163dc PNBR#91355: Foutmelding bij openen bestelvoorraad via menubalk.
svn path=/Website/trunk/; revision=70902
2025-11-12 09:17:00 +00:00
Jos Groot Lipman
637303608d Merge 2025.3 RC3 patches
svn path=/Website/trunk/; revision=70895
2025-11-11 15:17:41 +00:00
Erik Groener
0980028b25 FZKH#90768 Optie 'Annuleren' ontbreekt bij sjabloon-melding in Facilitor
zelfde wijziging, mar nu voor 20261.

svn path=/Website/trunk/; revision=70894
2025-11-11 14:55:10 +00:00
Maykel Geerdink
6cb10bb818 MARX#90078: Opdracht-actiestatus via API1 bij 'onderbroken/AFR' bij de (FO)BO kunnen zetten.
svn path=/Website/trunk/; revision=70873
2025-11-10 14:54:19 +00:00
Erik Groener
c3c49895ca AAIT#88271 Verschillende opties bij het scope van een contract
svn path=/Website/trunk/; revision=70867
2025-11-10 11:21:01 +00:00
Maykel Geerdink
e78a3c30ef YAXX#90069: Statusfout bij afgemelde offerteaanvragen voor goedkeuring.
svn path=/Website/trunk/; revision=70847
2025-11-06 13:21:20 +00:00
Erik Groener
2375767e8c VNOG#87525 Vraag over CC/BCC in Facilitor-mails
svn path=/Website/trunk/; revision=70842
2025-11-06 10:26:59 +00:00
Maykel Geerdink
e295ec02ad FMHN#87779: Gebruiker eerder waarschuwen bij meldingen op gebouwen zonder die dienst.
svn path=/Website/trunk/; revision=70838
2025-11-06 09:35:30 +00:00
Maykel Geerdink
8570b05fbc YAXX#90900: Verkeerde kostensoort wordt gebruikt voor de combinatievalidatie bij opdrachten.
svn path=/Website/trunk/; revision=70837
2025-11-06 09:18:01 +00:00
Maykel Geerdink
b5b54a5b22 VLKC#89552: Popup bij meldingen buiten werktijden Facilitydesk.
svn path=/Website/trunk/; revision=70836
2025-11-06 07:00:52 +00:00
Maykel Geerdink
73a048d788 FCLT#90274: Doorsturen/corrigeren vakgroep en (niet) terugzetten naar status Nieuw.
svn path=/Website/trunk/; revision=70831
2025-11-05 10:31:26 +00:00
2576f8265d Merge 2025.3 RC2 patches
svn path=/Website/trunk/; revision=70829
2025-11-05 10:12:51 +00:00
Maykel Geerdink
6bbc95a5e3 TDNL#89081: Automatische storingsmelding per object naar juiste leverancier regelen.
svn path=/Website/trunk/; revision=70824
2025-11-05 09:01:00 +00:00
Maykel Geerdink
a9f774e998 TDNL#89081: Automatische storingsmelding per object naar juiste leverancier regelen.
svn path=/Website/trunk/; revision=70822
2025-11-05 08:39:21 +00:00
Erik Groener
2a159ae719 FMHN#87779 Gebruiker eerder waarschuwen bij meldingen op gebouwen zonder die dienst
svn path=/Website/trunk/; revision=70820
2025-11-05 07:36:19 +00:00
Maykel Geerdink
e92477f83c KFSG#89311: Standaard werkelijke aantal bij no-show op 0 zetten in Logcentre.
svn path=/Website/trunk/; revision=70818
2025-11-04 16:31:56 +00:00
Maykel Geerdink
8fa296251d AAGN#88039: Performance issue bij assetmanagement en draaien/exporteren taken-overzicht.
svn path=/Website/trunk/; revision=70813
2025-11-04 14:47:52 +00:00
Maykel Geerdink
a2ac4198b1 MARX#90078: Opdracht-actiestatus via API1 bij 'onderbroken/AFR' bij de (FO)BO kunnen zetten.
svn path=/Website/trunk/; revision=70810
2025-11-04 14:03:32 +00:00
73d13809b4 LOGC#90401 Revert r70728
svn path=/Website/trunk/; revision=70795
2025-11-04 10:14:00 +00:00
Erik Groener
855ec8f776 YAXX#89674 Verschillende statusbehoeften bij inkooporders, probleem doorbelastingsfouten
svn path=/Website/trunk/; revision=70756
2025-10-29 18:14:45 +00:00
Maykel Geerdink
3be7a38080 AAGN#89339: Is het mogelijk om bij het afmelden van de melding dmv een vinkje de gekoppelde taak af te melden/voltooien.
svn path=/Website/trunk/; revision=70754
2025-10-29 15:44:21 +00:00
Erik Groener
9b32ad0951 VLKC#86503 Teams chatbericht vanaf bezoekersbalie naar contactpersoon
verkeerde prs_perslid voor contactpersoon email gebruikt.

svn path=/Website/trunk/; revision=70751
2025-10-29 13:27:05 +00:00
Erik Groener
4a740c5fa7 VLKC#86503 Teams chatbericht vanaf bezoekersbalie naar contactpersoon
svn path=/Website/trunk/; revision=70749
2025-10-29 11:12:38 +00:00
Maykel Geerdink
db76d3be03 FCLT#89456: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 31).
svn path=/Website/trunk/; revision=70741
2025-10-28 16:47:42 +00:00
Maykel Geerdink
821a7873b3 VNOG#89057: Vervaldatum van hoofdobject ook door laten werken in onderdelen.
svn path=/Website/trunk/; revision=70735
2025-10-28 15:12:30 +00:00
8138788fa7 LOGC#90401 Mijlpalen in de suggest worden gesorteerd op mijlpaal-datum, dat doen we vanaf nu precies andersom zodat de meeste relevante mijlpalen bovenaan staan
svn path=/Website/trunk/; revision=70728
2025-10-28 08:15:37 +00:00
Erik Groener
e93fa23f21 LOGC#90401 Mijlpaal direct in de kaart weergeven (bij MLD kaartindeling)
svn path=/Website/trunk/; revision=70727
2025-10-28 07:57:57 +00:00
Maykel Geerdink
619c2ef05a AAGN#88039: Performance issue bij assetmanagement en draaien/exporteren taken-overzicht.
svn path=/Website/trunk/; revision=70724
2025-10-27 15:42:15 +00:00
Erik Groener
482f217959 SZDB#74054 revert laatste wijziging: moest nog in 20253
svn path=/Website/trunk/; revision=70723
2025-10-27 15:36:38 +00:00
Erik Groener
93168d4d5e SZDB#74054 Tonen in lijst van flexkenmerken ook in mobile ondersteunen
svn path=/Website/trunk/; revision=70721
2025-10-27 15:26:58 +00:00
Erik Groener
a0e992b46b tabs gecorrigeerd
svn path=/Website/trunk/; revision=70710
2025-10-27 11:28:19 +00:00
Erik Groener
de91a5f4c3 DJIN#86656 Audit-trail/tracking toevoegen voor mutaties in Facilitor
svn path=/Website/trunk/; revision=70708
2025-10-27 10:49:59 +00:00
Jos Groot Lipman
226c01effa FCLT#91143 Dode code (sendMLDorders) verwijderd
svn path=/Website/trunk/; revision=70690
2025-10-22 12:21:39 +00:00
Jos Groot Lipman
e89ce3ce7f FCLT#88775 res_plantable_version uitfaseren en overbodige plaatjes verwijderen
svn path=/Website/trunk/; revision=70689
2025-10-22 12:10:40 +00:00
Maykel Geerdink
cebc4e2ae3 FCLT#91141: Beheer: ins_srtcontrole suggestbox geeft foutmelding bij "Elke tabel bekijken".
svn path=/Website/trunk/; revision=70671
2025-10-21 08:24:02 +00:00
61376ed460 FCLT#91143 Regio's kunnen niet verwijderd worden omdat de action-parameter in de body wordt meegestuurd ipv de QS
svn path=/Website/trunk/; revision=70670
2025-10-21 08:06:49 +00:00
Jos Groot Lipman
7cd47cccf7 UWVA#87948 Controle gebruik Vinder API voordat opruimen
svn path=/Website/trunk/; revision=70660
2025-10-20 10:41:05 +00:00
Jos Groot Lipman
1c61eaf749 FCLT#87838 function fclt_daily() respecteert custenv overrules (nog) niet.
svn path=/Website/trunk/; revision=70642
2025-10-16 13:36:17 +00:00
2fd917fe0d FCLT#90519 + Conversie naar versimpelde template
svn path=/Website/trunk/; revision=70640
2025-10-16 13:02:50 +00:00
Jos Groot Lipman
54a6b1ff42 Merge 2025.2 Gold E patches
svn path=/Website/trunk/; revision=70638
2025-10-16 12:49:30 +00:00
Erik Groener
4d66b2426d FCLT#91075 Mobiel ruimte reserveren leidt tot 'TypeError: bld_calendar.alt is undefined'
svn path=/Website/trunk/; revision=70635
2025-10-16 09:56:27 +00:00
Jos Groot Lipman
213c28658c VNOG#90806 'Onderdeel van' als extra kolom in backoffice lijst
svn path=/Website/trunk/; revision=70629
2025-10-15 15:34:51 +00:00
Jos Groot Lipman
6cc9fcb8eb VNOG#90806 'Onderdeel van' als extra kolom in backoffice lijst
svn path=/Website/trunk/; revision=70628
2025-10-15 15:22:57 +00:00
Jos Groot Lipman
4d65c0bedc VNOG#90806 'Onderdeel van' als extra kolom in backoffice lijst
svn path=/Website/trunk/; revision=70627
2025-10-15 15:13:45 +00:00
Jos Groot Lipman
e9506d7640 HSLE#91086 Vervallen kostenplaatsen blijven zichtbaar in gebruikersoverzicht.
svn path=/Website/trunk/; revision=70625
2025-10-15 14:46:03 +00:00
Jos Groot Lipman
107bd83704 UWVA#88793 Datummogelijkheden verbruiksartikelen catalogus per locatie
svn path=/Website/trunk/; revision=70623
2025-10-15 14:24:56 +00:00
Maykel Geerdink
63e7d64516 FCLT#82396: Beheer periodieke taken moment slecht zichtbaar.
svn path=/Website/trunk/; revision=70620
2025-10-15 13:05:58 +00:00
Erik Groener
c8730e0c10 TDNL#89081 Automatische storingsmelding per object naar juiste leverancier regelen
svn path=/Website/trunk/; revision=70619
2025-10-15 12:44:22 +00:00
Maykel Geerdink
968b796e26 FCLT#89444: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 13).
svn path=/Website/trunk/; revision=70617
2025-10-15 10:24:16 +00:00
Maykel Geerdink
2f069ce0d7 PROR#90706: Probleem sluitingen Maas interface opdrachten oplossen bij fout S21882.
svn path=/Website/trunk/; revision=70616
2025-10-15 07:57:04 +00:00
Jos Groot Lipman
81fecf4367 FCLT#90168 Gebruik SimilarSQL in suggests iets explicieter loggen.
svn path=/Website/trunk/; revision=70610
2025-10-14 11:54:48 +00:00
885655ca8e SGGR#90933 Zonder lees-rechten op de melding, na instemming een toaster tonen
svn path=/Website/trunk/; revision=70605
2025-10-14 08:52:56 +00:00
Jos Groot Lipman
62cfc543ff Merge 2025.2 Gold E patches
svn path=/Website/trunk/; revision=70599
2025-10-13 12:35:56 +00:00
e3bd8ddea4 FCLT#90519 savepoint
svn path=/Website/trunk/; revision=70590
2025-10-10 14:54:00 +00:00
f654875913 FCLT#90519 .css verversen als S(csstemplate) of S(csscust) aangepast worden
svn path=/Website/trunk/; revision=70588
2025-10-10 12:13:38 +00:00
Erik Groener
334398e7b1 VLKC#90054 Vaste bijlagen niet meegenomen in Mareon-PoC VLKC wensenlijst
svn path=/Website/trunk/; revision=70587
2025-10-10 07:09:33 +00:00
Erik Groener
9f119bdacc VLKC#90054 Vaste bijlagen niet meegenomen in Mareon-PoC VLKC wensenlijst
svn path=/Website/trunk/; revision=70586
2025-10-10 07:04:21 +00:00
Maykel Geerdink
cdd682efc8 MARX#89309: Facilitor Mobile: dagoverzicht van opdrachten o.b.v. plandatum.
svn path=/Website/trunk/; revision=70580
2025-10-09 07:58:36 +00:00
Jos Groot Lipman
77f551c7a7 FCLT#87838 function fclt_daily() respecteert custenv overrules (nog) niet.
svn path=/Website/trunk/; revision=70579
2025-10-09 07:40:23 +00:00
dd8874c9df BRCF#90569 Na AI plakken de submit-knop activeren
svn path=/Website/trunk/; revision=70577
2025-10-08 21:24:13 +00:00
1d9638080a FCLT#90519 Styling-template sterk verkleind en doorgevoerd door de applicatie css, ook diverse andere (kleine) styling aanpassingen
svn path=/Website/trunk/; revision=70576
2025-10-08 21:16:53 +00:00
Jos Groot Lipman
eda6cda6ce FCLT#90993 Bestelopdrachten kanaal toevoegen geeft fout over NULL invoegen
svn path=/Website/trunk/; revision=70573
2025-10-08 13:23:32 +00:00
Maykel Geerdink
c4b6c91b3a VNOG#90924: Discrepantie bij filteren objectenbeheer in Facilitor.
svn path=/Website/trunk/; revision=70572
2025-10-08 12:32:16 +00:00
Maykel Geerdink
d0d4fd471b VNOG#90924: Discrepantie bij filteren objectenbeheer in Facilitor.
svn path=/Website/trunk/; revision=70571
2025-10-08 12:16:45 +00:00
Jos Groot Lipman
e169b4ac94 MDUX#90867 Aanpassing Mareon_BES.xsl: contactgegevens, klantnummer en prefix FCC toevoegen aan bestel-XML
svn path=/Website/trunk/; revision=70568
2025-10-08 07:52:18 +00:00
Jos Groot Lipman
6f5de4a379 MDUX#90867 Geavanceerd parameters doorgeven via xlstransformparams
svn path=/Website/trunk/; revision=70565
2025-10-07 19:31:53 +00:00
Maykel Geerdink
2aadcfde1f MARX#89309: Facilitor Mobile: dagoverzicht van opdrachten o.b.v. plandatum.
svn path=/Website/trunk/; revision=70564
2025-10-07 17:47:26 +00:00
Maykel Geerdink
556c3ff8b3 FCLT#89443: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 7).
svn path=/Website/trunk/; revision=70563
2025-10-07 16:40:21 +00:00
Maykel Geerdink
8e8249ce1e FCLT#89443: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 7).
svn path=/Website/trunk/; revision=70561
2025-10-07 16:25:41 +00:00
3fbce15049 DLLG#90075 - DoLog
svn path=/Website/trunk/; revision=70559
2025-10-07 13:22:11 +00:00
Erik Groener
1522d72f30 PROR#89199 Per melding slechts één object selecteren
svn path=/Website/trunk/; revision=70558
2025-10-07 13:13:49 +00:00
Jos Groot Lipman
75ce10b8fb SGGR#81078 lcl naam was fout
svn path=/Website/trunk/; revision=70552
2025-10-07 07:04:10 +00:00
Jos Groot Lipman
cb3291d9de Release 2025.3 RC1
svn path=/Website/trunk/; revision=70548
2025-10-06 15:13:42 +00:00
47a0a1d510 FCLT#90519 Geen 'borders' voor een geneste startpagina
svn path=/Website/trunk/; revision=70547
2025-10-06 15:10:05 +00:00
cc5412da87 FCLT#90519 Revamp 1.2
svn path=/Website/trunk/; revision=70546
2025-10-06 15:05:26 +00:00
Jos Groot Lipman
617ceeab42 Merge 2025.2 Gold D/E patches
svn path=/Website/trunk/; revision=70542
2025-10-06 14:18:53 +00:00
Jos Groot Lipman
ae8f5e1fa3 FCLT#84701 Standaardkoppelingen via interface te beheren en instellen savepoint
svn path=/Website/trunk/; revision=70539
2025-10-06 12:57:44 +00:00
Erik Groener
ea166e1fbb BRCF#90919 Automatische opdrachten worden niet automatisch aangemaakt obv contract/dien
svn path=/Website/trunk/; revision=70534
2025-10-06 08:58:47 +00:00
972ea2df65 VNOG#90944 tekst-selectie niet als klik interpreteren
svn path=/Website/trunk/; revision=70531
2025-10-06 08:04:33 +00:00
Erik Groener
b69044ee0d UWVA#85875 Onvoldoende autorisatiecontrole voor API-gebruiker
svn path=/Website/trunk/; revision=70512
2025-10-03 09:55:25 +00:00
Jos Groot Lipman
5ee0b8f9fd FCLT#90149 Upgrade tsk package robuuster maken
svn path=/Website/trunk/; revision=70503
2025-10-02 11:27:28 +00:00
Erik Groener
ae7d101efc UWVA#88793 Datummogelijkheden verbruiksartikelen catalogus per locatie
- vervaldatum moet >= zijn

svn path=/Website/trunk/; revision=70488
2025-10-01 12:10:13 +00:00
Erik Groener
3e290aa5d6 FCLT#87173 Ontbrekende kolom taakcategorie in importsheets voor inspecties toevoegen
svn path=/Website/trunk/; revision=70476
2025-09-30 17:25:00 +00:00
Jos Groot Lipman
f0ff8579bf FCLT#90168 REVERT: de lopende zaken *kun* je nu ook vanuit het perspectief van een object opvragen
svn path=/Website/trunk/; revision=70474
2025-09-30 15:15:56 +00:00
800fbecf53 DLLG#90075 savepoint; doorgeven in lokale (plaats) tijdszone, opslaan in server-tijdszone. De reservering toont (in show & edit-mode) de lokale tijden (met hint-icoontje als die afwijkt van de tijdszone vd server of de gebruiker)
svn path=/Website/trunk/; revision=70473
2025-09-30 15:06:22 +00:00
Peter Feij
fac332177c FCLT#90168 de lopende zaken *kun* je nu ook vanuit het perspectief van een object opvragen, bv de bezetting van een werkplek(object)
svn path=/Website/trunk/; revision=70470
2025-09-30 14:04:16 +00:00
Jos Groot Lipman
b746ba4de7 FCLT#84701 Standaardkoppelingen via interface te beheren en instellen savepoint
svn path=/Website/trunk/; revision=70469
2025-09-30 13:44:20 +00:00
Jos Groot Lipman
ef53a13eb4 FCLT#84701 Standaardkoppelingen via interface te beheren en instellen savepoint
svn path=/Website/trunk/; revision=70468
2025-09-30 13:39:01 +00:00
ecdff040b0 FCLT#89765 hoekjes juist afgerond ..
svn path=/Website/trunk/; revision=70467
2025-09-30 13:03:42 +00:00
Maykel Geerdink
86a2d44581 STER#88372: EHBO middelen: foute melding bij overschrijding maximum aantal.
UWVA#90455: Probleem met verplichte veld "stickers" bij verzendstickers aanvragen.
FCLT#90539: Minmax bij kenmerken wordt niet goed gecontroleerd.

svn path=/Website/trunk/; revision=70464
2025-09-30 12:12:25 +00:00
Jos Groot Lipman
ba04e646e3 MARX#90858 Facilitor API contenttype aanpassen voor flexibele respons instellingen
svn path=/Website/trunk/; revision=70460
2025-09-30 10:07:32 +00:00
Jos Groot Lipman
3f3eadc244 FCLT#90489 Bij self-registratie mogen mensen niet altijd in _DEFAULT komen
svn path=/Website/trunk/; revision=70459
2025-09-30 08:40:09 +00:00
5055a16ade FCLT#90519 datum ook in edit mode (voorbeeld) voor presentatie formatteren
svn path=/Website/trunk/; revision=70458
2025-09-30 08:10:56 +00:00
56ad026d17 BRCF#90569 ook in de popup natuurlijke linebreaks, en de popup her-centreren na het terugkrijgen van de AI-tekst
svn path=/Website/trunk/; revision=70456
2025-09-30 07:49:59 +00:00
Maykel Geerdink
9f12648f2f FCLT#89452: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 24).
svn path=/Website/trunk/; revision=70455
2025-09-30 07:39:51 +00:00
Jos Groot Lipman
cd60d99ee3 Merge 2025.2 Gold D patches
svn path=/Website/trunk/; revision=70450
2025-09-29 15:04:28 +00:00
aa5be953d8 BRCF#90569 Samenvattings-knopje tonen bij (de notities van) meldingen
svn path=/Website/trunk/; revision=70449
2025-09-29 15:02:12 +00:00
Jos Groot Lipman
898aaa1883 FCLT#90783 Uitfaseren van klant-specifieke cust.css
svn path=/Website/trunk/; revision=70448
2025-09-29 14:40:25 +00:00
Maykel Geerdink
3fec7c41b5 ARAI#90300: Upload bijlagen faalt met MoveFlexfiles .... naar .... mislukt: File already exists.
svn path=/Website/trunk/; revision=70443
2025-09-29 13:04:30 +00:00
Jos Groot Lipman
c03616e600 FCLT#90168 Iets betere sql-statement layout.
svn path=/Website/trunk/; revision=70440
2025-09-29 12:12:34 +00:00
826cba9694 FCLT#90839 EXCHANGE-tasker automatisch aanmaken
svn path=/Website/trunk/; revision=70437
2025-09-29 11:41:47 +00:00
Jos Groot Lipman
73ecdfd69b FCLT#90168 kenmerk_beheer.inc wordt helemaal niet gebruikt
svn path=/Website/trunk/; revision=70436
2025-09-29 11:33:31 +00:00
Jos Groot Lipman
c4f07053d2 FCLT#84701 prs_bedrijfadres_template toevoeging
svn path=/Website/trunk/; revision=70435
2025-09-29 11:19:21 +00:00
Jos Groot Lipman
e57c72e09b FCLT#90835 Geen Firefox warning meer op onmozfullscreenchange
svn path=/Website/trunk/; revision=70432
2025-09-29 09:34:38 +00:00
Maarten van der Heide
8b884d927e FCLT#89130 Opdrachtbon/Verbeteren default
svn path=/Website/trunk/; revision=70428
2025-09-26 13:48:55 +00:00
Erik Groener
95cd0e79d7 UWVA#88793 Datummogelijkheden verbruiksartikelen catalogus per locatie
svn path=/Website/trunk/; revision=70425
2025-09-26 07:49:24 +00:00
Peter Feij
48aaeb1016 MENZ#88802 tekeningcoordinaten en -rotatie tekstueel zichtbaar bij objectdetails
svn path=/Website/trunk/; revision=70414
2025-09-24 12:49:39 +00:00
Jos Groot Lipman
0e50050752 FCLT#90168 Al 10 jaar obsolete. Controle op "Ionic's Isapi Rewrite Filter" mag wel weg.
svn path=/Website/trunk/; revision=70394
2025-09-23 10:54:27 +00:00
Jos Groot Lipman
8ffd5f3211 UWVA#90681 Achtergrond van QR-codes instelbaar maken (nu hardcoded wit)
svn path=/Website/trunk/; revision=70392
2025-09-23 10:19:33 +00:00
Jos Groot Lipman
868216dfe0 UWVA#90681 Achtergrond van QR-codes instelbaar maken (nu hardcoded wit)
svn path=/Website/trunk/; revision=70391
2025-09-23 10:05:03 +00:00
Erik Groener
19fb1cd580 SZDB#74054 Tonen in lijst van flexkenmerken ook in mobile ondersteunen
svn path=/Website/trunk/; revision=70389
2025-09-23 09:28:01 +00:00
7c86b5e4e7 YASK#88933 startpunt verwerken bepalen adhv imp_log_key ipv datum
svn path=/Website/trunk/; revision=70367
2025-09-19 07:03:40 +00:00
9e0efae928 YASK#88933 Fouten en Waarschuwingen ook weergeven bij het verwerken
svn path=/Website/trunk/; revision=70365
2025-09-18 15:19:46 +00:00
Jos Groot Lipman
98d7cefa9a FCLT#90168 refkey in FAC_NOTIFICATIE ook klikbaar maken naar record.
svn path=/Website/trunk/; revision=70363
2025-09-18 13:43:17 +00:00
79ae2373d8 FMHN#90641 spacing voor de schaduw
svn path=/Website/trunk/; revision=70362
2025-09-18 13:36:46 +00:00
5348b32fd8 CARG#85430 groupby=module toestaan (en werkend gemaakt) voor het fiatteringsoverzicht
svn path=/Website/trunk/; revision=70360
2025-09-18 12:06:32 +00:00
Jos Groot Lipman
1121755416 FCLT#90736 Bij migratie/import toevoegen attachments
svn path=/Website/trunk/; revision=70358
2025-09-18 11:11:56 +00:00
fbcdf57a1c FCLT#84804 AI-onderwerpen ook in de API
svn path=/Website/trunk/; revision=70357
2025-09-18 09:08:22 +00:00
Jos Groot Lipman
2414e6abfb FCLT#90715 fac_notificatie record ook opnemen in XML data
svn path=/Website/trunk/; revision=70350
2025-09-17 15:05:25 +00:00
cc6ab14dfd NOVA#89239 Refactoring + 'Opdracht verzenden'-knop ook tonen als bij opdrachttype 'Eerst vragen' staat ingesteld, en er niet direct verstuurd is
svn path=/Website/trunk/; revision=70348
2025-09-17 14:26:14 +00:00
5fdb81f885 FCLT#90519 bugfix; nieuwsberichten verwijderen gaat via /msg/fac_delete_nieuws.asp (itt community berichten)
svn path=/Website/trunk/; revision=70344
2025-09-17 11:59:40 +00:00
fe0fa312b0 FCLT#78405 Reden voor 'inloggen als' niet vragen op de [O]ntwikkel- en [A]cceptatie-omgevingen
svn path=/Website/trunk/; revision=70343
2025-09-17 11:35:44 +00:00
Erik Groener
7352054023 DSMA#90573 Klantspecifieke bewaking op opdrachten naar Base27
svn path=/Website/trunk/; revision=70339
2025-09-17 08:37:29 +00:00
Jos Groot Lipman
c528bb633d Merge 2025.2 Gold C patches
svn path=/Website/trunk/; revision=70336
2025-09-16 12:31:54 +00:00
45f8afa355 HSLE#88508 Vervallen kostenplaats (toch) 'bad' tonen
svn path=/Website/trunk/; revision=70333
2025-09-16 09:34:42 +00:00
Erik Groener
3bde602cde FCLT#90146 Ontmantelen ongebruikte SMS authenticatie
svn path=/Website/trunk/; revision=70320
2025-09-15 11:07:18 +00:00
1de60987a4 FMHN#90641 xxxl -> 3xl :)
svn path=/Website/trunk/; revision=70307
2025-09-12 14:21:58 +00:00
5f8df2bbfd FMHN#90641 Standaardisering vd border-radius & bugfixje; geen carousel bij 1 bericht
svn path=/Website/trunk/; revision=70306
2025-09-12 14:19:48 +00:00
575dd6fbb7 FCLT#90519 Facilitorbreed zoekveld restyled en de achtergrond vd hoofdpagina donkerder gemaakt
svn path=/Website/trunk/; revision=70304
2025-09-12 12:30:38 +00:00
211bfda96e HSLE#88508 Ongeldige (verlopen) kostenplaats niet als default tonen, ook niet als 'Bad' default
svn path=/Website/trunk/; revision=70303
2025-09-12 09:40:22 +00:00
b61551c6b7 FMHN#90641 minimale styling aanpassing
svn path=/Website/trunk/; revision=70301
2025-09-12 09:18:32 +00:00
d84d8c719d BCGV#88984 Foto's van de berichten ook in de (default) bon opnemen
svn path=/Website/trunk/; revision=70299
2025-09-12 08:29:02 +00:00
cd5badd87d DLLG#90075 Refactoring, -comment, +getTimezoneByResRuimte
svn path=/Website/trunk/; revision=70294
2025-09-11 14:11:28 +00:00
a83966de34 FMHN#90641 nu echt
svn path=/Website/trunk/; revision=70284
2025-09-11 11:58:47 +00:00
f538ab9687 FMHN#90641 Geen html-code in het label meer tonen bij vertrouwelijke kenmerken
svn path=/Website/trunk/; revision=70283
2025-09-11 11:57:29 +00:00
ca44f7e497 FCLT#90519 verkeerdom..
svn path=/Website/trunk/; revision=70278
2025-09-11 07:15:49 +00:00
42043eccad FCLT#90519 Na reply-en naar hetzelfde nieuwsitem terug
svn path=/Website/trunk/; revision=70272
2025-09-10 15:14:50 +00:00
7212020cc8 FCLT#90519 Styling nieuwspagina vernieuwst
svn path=/Website/trunk/; revision=70270
2025-09-10 13:53:48 +00:00
55f44f2b69 FCLT#86235 Bootstrap 5.3.3 -> 5.3.8
svn path=/Website/trunk/; revision=70267
2025-09-10 12:44:54 +00:00
Erik Groener
8988fbd7b2 SZDB#74054 Tonen in lijst van flexkenmerken ook in mobile ondersteunen
svn path=/Website/trunk/; revision=70255
2025-09-09 13:22:30 +00:00
Jos Groot Lipman
705c195cbb MARX#90181 http status bij errors in API aanroepen per persoon kunnen instellen.
svn path=/Website/trunk/; revision=70251
2025-09-09 12:17:58 +00:00
Jos Groot Lipman
760b2e8101 FCLT#90168 "HMAC: Te laat: je had voor 2025-09-08 23:29:06 moeten zijn." hoeft geen __DoLog te zijn van mij
svn path=/Website/trunk/; revision=70250
2025-09-09 12:11:06 +00:00
e63e132b8f AQQA#87641 Afhankelijk van S(mld_uses_requestor_location) (en daarnaast de aan-/afwezigheid van een sterkere locatie) zullen we de plaats vd aanvrager wel of niet gebruiken
PROR#89199 Syntaxerror fixed

svn path=/Website/trunk/; revision=70241
2025-09-08 12:05:00 +00:00
Jos Groot Lipman
e916cec8e8 FCLT#87959 AAREON SMS server geeft xmlHTTP error 200 bij lange berichten
svn path=/Website/trunk/; revision=70237
2025-09-08 11:31:48 +00:00
Jos Groot Lipman
27ece7ba7c CSUN#88352 Falende notificaties kunnen verwijderen als applicatiebeheerder
svn path=/Website/trunk/; revision=70234
2025-09-08 10:06:33 +00:00
d2adb786fc FZKH#90352 Bij het wisselen van vakgroep/stdmelding, niet de objecten wissen, tenzij ze invalide zijn geworden (vanwege de scope die de stdmelding dicteert)
svn path=/Website/trunk/; revision=70219
2025-09-04 14:34:11 +00:00
550e313b1a FCLT#89765 Uitgeschakelde notitie-icoontjes grijs weergeven
svn path=/Website/trunk/; revision=70214
2025-09-04 07:41:07 +00:00
87456834c2 FCLT#89765 De reguliere 'deze melding is afgemeld' info-tekst maar in dezelfde stijl dan he
svn path=/Website/trunk/; revision=70210
2025-09-03 15:26:27 +00:00
7ed64dcc95 FCLT#89765 100% breed (in het notitieframe)
svn path=/Website/trunk/; revision=70208
2025-09-03 15:14:23 +00:00
08d149b3fd FCLT#89765 font-weight
svn path=/Website/trunk/; revision=70206
2025-09-03 15:00:23 +00:00
5cd5717400 FCLT#89765 Opmaak informerende melding bij notities aangepast
svn path=/Website/trunk/; revision=70205
2025-09-03 14:52:42 +00:00
9bde25342b CVGZ#78718 %temp% -> %exchtemp%
svn path=/Website/trunk/; revision=70202
2025-09-03 14:26:30 +00:00
Erik Groener
5f7a668481 FCLT#90239 Meldingenlijst - Filter op meerdere mijlpalen en op meldingen zonder mijlp
svn path=/Website/trunk/; revision=70195
2025-09-03 09:17:22 +00:00
Peter Feij
6f90c05c88 FCLT#90168 optie om met dates+128 de standaard sortering van lopende zaken om te draaien.
svn path=/Website/trunk/; revision=70181
2025-09-02 10:06:15 +00:00
Jos Groot Lipman
0455337525 Merge 2025.2 Gold A patches
svn path=/Website/trunk/; revision=70179
2025-09-02 08:07:06 +00:00
Erik Groener
10a0894a26 FCLT#67974 Lek in ophalen objectkenmerken bij een melding
svn path=/Website/trunk/; revision=70162
2025-09-01 10:05:57 +00:00
8539045ef4 FCLT#89765 Opmaak waarschuwing / mld/opdr-substatus
svn path=/Website/trunk/; revision=70159
2025-09-01 08:24:43 +00:00
Erik Groener
b59e4b28b1 FCLT#89765 Problemen afgemelde meldingen na update functie #83589
svn path=/Website/trunk/; revision=70151
2025-08-29 07:26:08 +00:00
Peter Feij
55fee2b8ba SGGR#90235 Langlopende voorzieningen niet tussentijds tonen
svn path=/Website/trunk/; revision=70146
2025-08-28 16:23:26 +00:00
Peter Feij
2e6f0ad09e LOGC#90445 Mijlpalen een levensduur kunnen geven
svn path=/Website/trunk/; revision=70145
2025-08-28 14:51:43 +00:00
Peter Feij
915a255735 LOGC#90445 Mijlpalen een levensduur kunnen geven
svn path=/Website/trunk/; revision=70144
2025-08-28 14:47:19 +00:00
Peter Feij
7215779ccc FCLT#90168 NESTED_BLOCKS fix
svn path=/Website/trunk/; revision=70138
2025-08-28 12:13:16 +00:00
Peter Feij
88cba48e04 FCLT#88619 Naamgeving kenmerkdomein pagina's
svn path=/Website/trunk/; revision=70137
2025-08-28 10:27:41 +00:00
Jos Groot Lipman
e89a6f0f2d CSUN#88352 Falende notificaties kunnen verwijderen als applicatiebeheerder
svn path=/Website/trunk/; revision=70130
2025-08-27 15:54:32 +00:00
Peter Feij
bbb2f40a00 FCLT#90168 het flags veld bij een persoon in van een getal omgezet naar een *iets* beter te definieren rijtje vinkjes
svn path=/Website/trunk/; revision=70129
2025-08-27 13:46:03 +00:00
Peter Feij
0c45b9ca55 DLLG#90075 Verbetering timezoneselector
svn path=/Website/trunk/; revision=70122
2025-08-27 11:43:43 +00:00
Erik Groener
9b447642c3 FMHN#75443 Importeren "Extern nr" bij Rijnstraat 8 artikelen
svn path=/Website/trunk/; revision=70118
2025-08-27 10:00:02 +00:00
87618c8a21 FZKH#90026 - logje
svn path=/Website/trunk/; revision=70117
2025-08-27 09:32:43 +00:00
8cd4b26922 FCLT#90357 Selectiever querien om publicatie-rechten te evalueren
svn path=/Website/trunk/; revision=70116
2025-08-27 09:13:08 +00:00
82399bcc51 FZKH#90026 Zichtbaarheid van kenmerkblokken in showmode ook voor andere modules dan MLD / OPDR evalueren
svn path=/Website/trunk/; revision=70115
2025-08-27 09:04:45 +00:00
Peter Feij
c3d1736140 DLLG#90075 Ondersteuning werkplekbeheer in verschillende tijdzones
svn path=/Website/trunk/; revision=70113
2025-08-26 22:10:58 +00:00
Erik Groener
e5286d4ad4 FCLT#89765 Problemen afgemelde meldingen na update functie #83589
svn path=/Website/trunk/; revision=70110
2025-08-26 12:44:46 +00:00
67f1e67196 PNBR#90029 Conditionele label-kenmerken mobile fixed
svn path=/Website/trunk/; revision=70107
2025-08-26 12:04:52 +00:00
d29a6c7b30 FCLT#90399 Mijlpaal is nu gewoon direct zichtbaar (waar van toepassing)
svn path=/Website/trunk/; revision=70102
2025-08-26 08:20:19 +00:00
Maykel Geerdink
54f39d18fd ARAI#90300: Upload bijlagen faalt met MoveFlexfiles .... naar .... mislukt: File already exists.
svn path=/Website/trunk/; revision=70098
2025-08-25 12:59:03 +00:00
Erik Groener
96daf3e9cb PROR#89199 Per melding slechts één object selecteren
svn path=/Website/trunk/; revision=70097
2025-08-25 12:56:27 +00:00
Jos Groot Lipman
b247ee2fa9 FCLT#90149 Upgrade tsk package robuuster maken
svn path=/Website/trunk/; revision=70093
2025-08-25 11:09:31 +00:00
Peter Feij
add30aa203 SGGR#81078 Sensoren: ondersteuning triggerwaarde voor status-sensoren, GUI
svn path=/Website/trunk/; revision=70082
2025-08-22 14:21:56 +00:00
Peter Feij
9ccef0f2b3 SGGR#81078 Sensoren: beheer, geldigheid, tolerantie
svn path=/Website/trunk/; revision=70071
2025-08-21 10:49:29 +00:00
Maykel Geerdink
b211f5ad58 FCLT#89448: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 21).
svn path=/Website/trunk/; revision=70069
2025-08-21 09:49:14 +00:00
Peter Feij
877a4f04e5 SGGR#81078 (SVN header syntax fix)
svn path=/Website/trunk/; revision=70063
2025-08-20 14:53:35 +00:00
Peter Feij
1ccc8184dc FCLT#87498 Sensoren ook op naam kunnen zetten met een standaard plugin
svn path=/Website/trunk/; revision=70061
2025-08-20 14:41:15 +00:00
Erik Groener
57ff304216 FCLT#89765 Problemen afgemelde meldingen na update functie #83589
svn path=/Website/trunk/; revision=70055
2025-08-20 12:06:39 +00:00
Maykel Geerdink
d390e2d75f BAUS#86115: Berekening momentmodus-taak niet conform auditnormen bij eerste uitvoering.
svn path=/Website/trunk/; revision=70053
2025-08-20 10:33:37 +00:00
Jos Groot Lipman
650313b3e8 FCLT#90324 Tasker tegen meerdere omgevingen kunnen draaien
svn path=/Website/trunk/; revision=70048
2025-08-19 15:21:12 +00:00
Jos Groot Lipman
bdad1c97e2 FCLT#90168 Identity provider scherm standaard 'Gebruik dag/maand/jaar' kolom aanzetten, en ook loglevel
svn path=/Website/trunk/; revision=70045
2025-08-19 14:24:37 +00:00
Jos Groot Lipman
1105554f85 Release 2025.2 Gold C
svn path=/Website/trunk/; revision=70031
2025-08-18 15:13:39 +00:00
Maykel Geerdink
9462bc1ec3 FCLT#89443: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 7).
svn path=/Website/trunk/; revision=70026
2025-08-18 11:53:57 +00:00
Erik Groener
59e905e1a5 KFNS#88951 Corrigeer API-call: Terrein-gebonden objecten niet geretourneerd
svn path=/Website/trunk/; revision=70020
2025-08-15 09:54:00 +00:00
Erik Groener
ae6896182d PROR#87027 Velden sortering/prioritering missen in Gispen opdrachtoverzicht
svn path=/Website/trunk/; revision=70018
2025-08-15 08:27:23 +00:00
Jos Groot Lipman
136e431d35 FCLT#90265 Putorders sql voor gegarandeerde volgorde notificaties is incorrect
svn path=/Website/trunk/; revision=70013
2025-08-14 14:48:29 +00:00
Peter Feij
807b4001dc LOGC#90264 Ook geaccepteerde meldingen nog kunnen afwijzen BETA4
svn path=/Website/trunk/; revision=70012
2025-08-14 14:38:29 +00:00
Peter Feij
c7cafc7535 LOGC#90264 Ook geaccepteerde meldingen nog kunnen afwijzen
svn path=/Website/trunk/; revision=70009
2025-08-14 14:09:19 +00:00
23a50b5100 SVRZ#79733 Per bloktitel-kenmerk kun je vaste label-lengtes (percentage) vastleggen in het formatterings-veld. Let op dat 100 al wat anders betekent, nl. dat het blok zelf zo breed wordt als het hele scherm
svn path=/Website/trunk/; revision=70008
2025-08-14 13:10:36 +00:00
Jos Groot Lipman
424dbdb577 YAXX#88573 Export via interface bij lege data geen bestand aanmaken
svn path=/Website/trunk/; revision=70007
2025-08-14 13:03:06 +00:00
Jos Groot Lipman
f740be701c YAXX#88573 Export via interface bij lege data geen bestand aanmaken
svn path=/Website/trunk/; revision=70006
2025-08-14 12:56:46 +00:00
Erik Groener
052b27b708 FCLT#84511 Kenmerken overzicht voor 'alle' niveaus
- verbeteren voor api-endpoint

svn path=/Website/trunk/; revision=70005
2025-08-14 09:54:11 +00:00
Erik Groener
e32c3a6ebb FCLT#84511 Kenmerken overzicht voor 'alle' niveaus
svn path=/Website/trunk/; revision=70002
2025-08-14 08:42:57 +00:00
Peter Feij
55a6c2ffa8 FCLT#87498 Gebruiksinfo expliciet via vinkje beschikbaar maken
svn path=/Website/trunk/; revision=69999
2025-08-13 15:45:33 +00:00
Maykel Geerdink
90778f0055 FCLT#90174: MJOB: xcp record wordt niet verwijderd terwijl er geen wijzigingen zijn t.o.v. basistaak.
svn path=/Website/trunk/; revision=69997
2025-08-13 14:14:56 +00:00
Maykel Geerdink
d88bb23828 FCLT#90174: MJOB: xcp record wordt niet verwijderd terwijl er geen wijzigingen zijn t.o.v. basistaak.
svn path=/Website/trunk/; revision=69995
2025-08-13 13:50:10 +00:00
Peter Feij
e5ccfc8359 FCLT#87498 Gebruiksinfo per ruimte op basis van reserveringen, ruimte en werkplek, iteratie
svn path=/Website/trunk/; revision=69994
2025-08-13 13:26:14 +00:00
Maykel Geerdink
fbbe7cec0e FCLT#89444: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 13).
svn path=/Website/trunk/; revision=69988
2025-08-13 10:35:00 +00:00
Erik Groener
3fdd7c47ae FCLT#74341 Overschrijden van S("qp_maxgridrows") niet zichtbaar bij reserveren objecte
svn path=/Website/trunk/; revision=69982
2025-08-13 08:23:39 +00:00
Maykel Geerdink
a2bc4ba5ff FCLT#90174: MJOB: xcp record wordt niet verwijderd terwijl er geen wijzigingen zijn t.o.v. basistaak.
svn path=/Website/trunk/; revision=69981
2025-08-12 15:19:37 +00:00
Maykel Geerdink
1cd1f31127 FCLT#89443: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 7).
svn path=/Website/trunk/; revision=69979
2025-08-12 15:12:24 +00:00
ff481eafe1 HSLE#88508 Verlopen kostenplaats niet als [geldige] default optie invullen bij het aanmaken van een nieuwe reservering
svn path=/Website/trunk/; revision=69976
2025-08-12 13:37:57 +00:00
Peter Feij
1d1fc5199c FCLT#87498 Gebruiksinfo per ruimte op basis van reserveringen, ruimte en werkplek
svn path=/Website/trunk/; revision=69974
2025-08-12 11:49:05 +00:00
2474d84958 BCGV#88984 fclthtml kan nu plaatjes tonen als de module en entiteit-key correct wordt meegegeven
svn path=/Website/trunk/; revision=69963
2025-08-12 08:33:36 +00:00
Maykel Geerdink
112758ee50 FCLT#90223: MJOB: Doorschuiven taak geeft foutmelding als groepering niet op taken staat.
svn path=/Website/trunk/; revision=69961
2025-08-12 07:55:16 +00:00
Peter Feij
832e7805b6 FCLT#87498 Gebruiksinfo per ruimte op basis van sensordata
svn path=/Website/trunk/; revision=69959
2025-08-12 06:47:18 +00:00
Maykel Geerdink
8fd30b06ed FCLT#89443: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 7).
svn path=/Website/trunk/; revision=69956
2025-08-11 12:29:50 +00:00
Jos Groot Lipman
fbafaafbd6 MARX#90181 http status bij errors in API aanroepen per persoon kunnen instellen.
svn path=/Website/trunk/; revision=69955
2025-08-11 12:06:26 +00:00
062ec63a8e CVGZ#78718 Exchange log-bestanden in de TEMP folder opslaan
svn path=/Website/trunk/; revision=69944
2025-08-07 09:26:22 +00:00
72c666f598 CVGZ#78718 Exchange log-bestanden in de TEMP folder opslaan
svn path=/Website/trunk/; revision=69943
2025-08-07 09:17:06 +00:00
Peter Feij
003a3a003a FCLT#86155 Rapportagekolommen die actief zijn in de sortering bovenaan tonen ipv verspreid
svn path=/Website/trunk/; revision=69938
2025-08-06 16:43:26 +00:00
Jos Groot Lipman
ff2f2f5a31 FCLT#88579 Facilitor utf-8 ondersteuning
svn path=/Website/trunk/; revision=69936
2025-08-06 12:55:12 +00:00
916cbb4eee FCLT#90168 Melding referentie als 'Oorsprong' nemen bij het maken van een kennisbankitem vanuit een melding
svn path=/Website/trunk/; revision=69932
2025-08-06 10:57:55 +00:00
Jos Groot Lipman
ee5b315a24 FCLT#90168 Nu MSGRAPH hooks niet meer via de _incomingOutlookQueue lopen hoef fac_verify dat ook niet meer te controleren
svn path=/Website/trunk/; revision=69930
2025-08-06 10:53:17 +00:00
Erik Groener
014160115d FCLT#89720 Systeemadres per vakgroep kunnen definieren ==> ook meerdere toestaan
svn path=/Website/trunk/; revision=69927
2025-08-06 09:00:26 +00:00
e9728f58e2 FCLT#89736 revert punt 10 (port naar branch)
svn path=/Website/trunk/; revision=69918
2025-08-05 12:55:09 +00:00
efd9ca10f5 FCLT#89736 punt 10
svn path=/Website/trunk/; revision=69917
2025-08-05 12:48:13 +00:00
Erik Groener
d85da81c76 FCLT#67974 Lek in ophalen objectkenmerken bij een melding
* alleen voor info die opgevraagd wordt met een mld_key die statisch is (dus niet client side bepaald wordt)

svn path=/Website/trunk/; revision=69915
2025-08-05 11:37:38 +00:00
Erik Groener
83d0a16cce FCLT#67974 Lek in ophalen objectkenmerken bij een melding
* Ophalen van gegevens uit get_mld_info_ajax.asp voor req_info= mld_status, calc_opdr_einddatum_sla_lev, show_after_fwd, show_after_upd en promptAI gaat nu met protectQS().

svn path=/Website/trunk/; revision=69910
2025-08-04 14:09:38 +00:00
Jos Groot Lipman
97fa5995cb FCLT#89356 AiAi op Bad HMAC syntax van locked user url
svn path=/Website/trunk/; revision=69893
2025-07-31 11:15:02 +00:00
Maykel Geerdink
96a876e5d4 FCLT#90110: MJOB: Herplannen van verschoven bedrag naar een jaar voor het startjaar verschuift bedrag naar startjaar.
svn path=/Website/trunk/; revision=69892
2025-07-31 07:50:17 +00:00
Maykel Geerdink
b9f00bff29 FCLT#90074: MJOB: Tijdens het terugzetten van taken foutmelding.
svn path=/Website/trunk/; revision=69870
2025-07-29 13:25:41 +00:00
Maykel Geerdink
5017718513 FCLT#89442: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 6).
svn path=/Website/trunk/; revision=69857
2025-07-28 09:36:12 +00:00
Maykel Geerdink
6565a54eea FCLT#89440: Wijzigingen en verbeteringsvoorstellen MJOB module (Punt 3).
svn path=/Website/trunk/; revision=69856
2025-07-28 07:55:25 +00:00
Maykel Geerdink
ebe5bfc27d BVB1#88210: MJOB Scenario foutmelding zichtbaar in bijlagen.
svn path=/Website/trunk/; revision=69849
2025-07-24 12:48:39 +00:00
Maykel Geerdink
1c7161d165 FCLT#82396: Beheer periodieke taken moment slecht zichtbaar.
svn path=/Website/trunk/; revision=69844
2025-07-24 06:10:18 +00:00
Maykel Geerdink
72389987b4 BLOS#74317: Worden bijlagen wel goed verkleind als je ze mobiel uploadt?
svn path=/Website/trunk/; revision=69826
2025-07-21 13:34:52 +00:00
Jos Groot Lipman
011b7f6eae Merge 2025.2 Gold A patches
svn path=/Website/trunk/; revision=69806
2025-07-16 15:32:47 +00:00
Maykel Geerdink
6e5816ce3f FCLT#88462: MJOB: Bij handmatig uitvoeren van een taak wordt vervallen melding aangemaakt.
svn path=/Website/trunk/; revision=69768
2025-07-14 15:33:14 +00:00
Jos Groot Lipman
b30badcae2 Merge 2025.2 Gold A patches
svn path=/Website/trunk/; revision=69758
2025-07-14 08:13:36 +00:00
Erik Groener
8883fed8c0 LOGC#89099 Mijlpaal toevoegen aan Doorsturen/Toewijzen-dialoog
svn path=/Website/trunk/; revision=69749
2025-07-11 09:00:06 +00:00
Erik Groener
f0e468344b UWVA#89614 AiAi tijdbalken_kop bij prodsearch reserveerbare ruimtes
svn path=/Website/trunk/; revision=69738
2025-07-10 09:55:30 +00:00
Erik Groener
870b8cceae SUTF#86127 Overzicht periodieke taken aanpassen in app voor betere bruikbaarheid
* toevoegknop verwijderen

svn path=/Website/trunk/; revision=69731
2025-07-09 14:14:16 +00:00
Erik Groener
64a0d6719e SUTF#86127 Overzicht periodieke taken aanpassen in app voor betere bruikbaarheid
svn path=/Website/trunk/; revision=69729
2025-07-09 12:13:21 +00:00
Maykel Geerdink
0a01c38bd8 TDNL#88838: Bijlage optioneel bij bulk gereedmelden werkt niet uniform.
svn path=/Website/trunk/; revision=69721
2025-07-09 08:28:14 +00:00
66e1099ec9 HSLE#89732 (primaire) behandelaar moet hier wel te bewerken zijn
svn path=/Website/trunk/; revision=69708
2025-07-08 13:24:31 +00:00
Erik Groener
fc844a06f6 VLKC#89553 Melding groeperen door front-enduser in ticket A40972 voorkomen
svn path=/Website/trunk/; revision=69702
2025-07-08 11:19:13 +00:00
Erik Groener
3704349526 FCLT#89279 Autorisaties zijn ongeautoriseerd te verwijderen
svn path=/Website/trunk/; revision=69685
2025-07-07 14:08:48 +00:00
Erik Groener
290ab0f556 AAIT#80866 Extra bijlage toevoegen aan opdracht
svn path=/Website/trunk/; revision=69648
2025-07-03 09:34:45 +00:00
Jos Groot Lipman
8686d19cec FCLT#88993 Einde ondersteuning database prs.setpassword en prs.testpassword
svn path=/Website/trunk/; revision=69617
2025-07-01 11:40:40 +00:00
Jos Groot Lipman
300d1f9bf9 Merge 2025.2 RC2 patches
svn path=/Website/trunk/; revision=69610
2025-07-01 10:20:25 +00:00
Erik Groener
75a764092c TWYN#89587 Verwijderdata in /get_bgt_info_ajax.asp worden niet meegenomen
svn path=/Website/trunk/; revision=69607
2025-07-01 07:35:30 +00:00
e7b952f56a Merge 2025.2 RC2 patches (ongoing)
svn path=/Website/trunk/; revision=69511
2025-06-23 07:36:36 +00:00
Erik Groener
92ede63758 FCLT#88474 Niet-herstelbare wijziging numeriek veldtype UDR rapport
naar versie 2025.3

svn path=/Website/trunk/; revision=69468
2025-06-18 10:10:15 +00:00
816b675afa SUTF#86127 icoontje
svn path=/Website/trunk/; revision=69410
2025-06-12 14:30:00 +00:00
575 changed files with 11971 additions and 18489 deletions

2
APPL/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/.vscode
.vs

View File

@@ -47,7 +47,7 @@ FCLTHeader.Requires({ plugins:["jQuery"] });
var data = { key: disKeyString,
level: "D"
};
<% protectRequest.dataToken("data"); %>+
<% protectRequest.dataToken("data"); %>
$.post("alg_delete.asp", data, FcltCallbackRefresh, "json");
}
);

View File

@@ -11,12 +11,12 @@
Note:
*/ %>
<!--#include file="../Shared/common.inc" -->
<!--#include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!--#include file="../Shared/selector.inc" -->
<!--#include file="../Shared/plaatsselector.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/timezoneselector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="alg_flexkenmerk.inc" -->
<!-- #include file="alg.inc" -->
@@ -59,6 +59,7 @@ if (loc_key > 0)
var dienstniveau = oRs("mld_dienstniveau_key").Value;
var loc_score1 = oRs("alg_locatie_mjb_score1").Value;
var vervaldatum = oRs("alg_locatie_vervaldatum").Value != null ? new Date(oRs("alg_locatie_vervaldatum").Value) : null;
var alg_tz = oRs("alg_locatie_timezone").Value;
oRs.Close();
}
@@ -131,6 +132,7 @@ BLOCK_END();
BLOCK_START("facFM", L("lcl_operations_block"), {icon: "fa-users-cog"});
manRWFIELD("loc_volgnr", "fld", L("lcl_alg_locatie_volgnr"), loc_volgnr, {maxlength: 3});
FCLTtimezoneselector("alg_tz", { initVal: alg_tz });
FCLTcalendar("vervaldatum",
{ datum: vervaldatum,
initEmpty: vervaldatum==null,

View File

@@ -49,7 +49,9 @@ if (this_alg.writeman)
{ dbs: "alg_locatie_vervaldatum", typ: "date", frm: "vervaldatum", track: L("lcl_alg_vervaldatum") },
{ dbs: "alg_locatie_email", typ: "varchar", frm: "loc_mail", track: L("lcl_noti_email") },
{ dbs: "alg_locatie_image", typ: "varchar", frm: "loc_image", track: L("lcl_alg_locatie_image") },
{ dbs: "alg_locatie_volgnr", typ: "number", frm: "loc_volgnr", track: L("lcl_alg_locatie_volgnr") });
{ dbs: "alg_locatie_volgnr", typ: "number", frm: "loc_volgnr", track: L("lcl_alg_locatie_volgnr") },
{ dbs: "alg_locatie_timezone", typ: "varchar", frm: "alg_tz", track: L("lcl_timezone") }
);
if (alg.canWriteDistrict(dis_key, this_alg.authparams("WEB_ALGMAN").ALGwritelevel))
fields.push({ dbs: "alg_district_key", typ: "key", val: dis_key });

View File

@@ -54,6 +54,7 @@ if (ter_key > 0)
+ ", prs_afdeling_key"
+ ", prs_perslid_key_verantw"
+ ", prs_perslid_key_verantw2"
+ ", mld_dienstniveau_key"
+ " FROM alg_terreinsector "
+ " WHERE alg_terreinsector_key = " + ter_key;
@@ -77,6 +78,7 @@ if (ter_key > 0)
var toon_email = oRs("alg_terreinsector_toon_email").Value;
var toon_kenteken = oRs("alg_terreinsector_toon_kentk").Value;
var vervaldatum = oRs("alg_terreinsector_vervaldatum").Value != null ? new Date(oRs("ALG_TERREINSECTOR_VERVALDATUM").Value) : null;
var dienstniveau = oRs("mld_dienstniveau_key").Value;
oRs.Close();
}
@@ -213,6 +215,20 @@ BLOCK_START("algter3", L("lcl_alg_gebouw_administr"), {icon: "fa-clipboard"});
FILEPICKERTR("ter_image", L("lcl_alg_terreinsector_image"), ter_image, { "key": ter_key, "module": "ALGPHT", "readonly": !this_alg.writeman });
BLOCK_END();
BLOCK_START("algter4", L("lcl_alg_gebouw_facilitair"), {icon: "fa-users-cog"});
sql = "SELECT mld_dienstniveau_key"
+ " , " + lcl.xsqla("mld_dienstniveau_omschr", "mld_dienstniveau_key")
+ " FROM mld_dienstniveau"
+ " ORDER BY UPPER(" + lcl.xsql("mld_dienstniveau_omschr", "mld_dienstniveau_key") + ")";
FCLTselector("dienstniveau",
sql,
{ label: L("lcl_mld_dienst_niveau"),
initKey: dienstniveau,
emptyOption: "",
readonly: !this_alg.writeman
});
BLOCK_END();
BLOCK_START("algter4", L("lcl_alg_gebouw_fysiek"), {icon: "fa-ruler-combined"});
RWFIELDTR("ter_opp", "fldshort", L("lcl_estate_terreinsector_man_oppervlak"), ter_opp, {maxlength: 15});

View File

@@ -145,6 +145,17 @@ user.auth_required_or_abort(tobeedited > 0); // We klagen niet over enkele wel e
emptyOption: "",
initEmpty: true
});
sql = "SELECT mld_dienstniveau_key"
+ " , " + lcl.xsqla("mld_dienstniveau_omschr", "mld_dienstniveau_key")
+ " FROM mld_dienstniveau"
+ " ORDER BY UPPER(" + lcl.xsql("mld_dienstniveau_omschr", "mld_dienstniveau_key") + ")";
FCLTselector("dienstniveau",
sql,
{ label: L("lcl_mld_dienst_niveau"),
emptyOption: "",
initEmpty: true,
readonly: !this_alg.writeuse
});
MODAL_BLOCK_END();

View File

@@ -49,6 +49,8 @@ if (Request.Form("toon_kenteken").Count == 1 && getFParam("check_toon_kenteken",
{ var toon_k = (getFParam("toon_kenteken") ? getFParam("toon_kenteken") : 0);
fields.push({ dbs: "alg_terreinsector_toon_kentk", typ: "number", val: toon_k, track: L("lcl_estate_gebouw_toon_kenteken")});
}
if (Request.Form("dienstniveau").Count == 1 && getFParam("check_dienstniveau", "off") == "on")
fields.push({ dbs: "mld_dienstniveau_key", typ: "key", frm: "dienstniveau", track: L("lcl_mld_dienst_niveau"), foreign: "mld_dienstniveau" });
for (var i = 0; i < ter_key_arr.length; i++)

View File

@@ -37,7 +37,8 @@ var fields = [{ dbs: "alg_terreinsector_omschrijving", typ: "varchar", frm: "ter
{ dbs: "prs_kostenplaats_key", typ: "key", frm: "prs_kstn", track: L("lcl_prs_dept_kosten"), foreign: "PRS_KOSTENPLAATS" },
{ dbs: "prs_afdeling_key", typ: "key", frm: "prs_afd", track: L("lcl_dep_name_level2"), foreign: "PRS_AFDELING" },
{ dbs: "prs_perslid_key_verantw", typ: "key", frm: "verantw", track: L("lcl_alg_verantw"), foreign: "PRS_PERSLID" },
{ dbs: "prs_perslid_key_verantw2", typ: "key", frm: "verantw2", track: L("lcl_alg_verantw2"), foreign: "PRS_PERSLID" }];
{ dbs: "prs_perslid_key_verantw2", typ: "key", frm: "verantw2", track: L("lcl_alg_verantw2"), foreign: "PRS_PERSLID" },
{ dbs: "mld_dienstniveau_key", typ: "key", frm: "dienstniveau", track: L("lcl_mld_dienst_niveau"), foreign: "MLD_DIENSTNIVEAU" }];
if (this_alg.writeman)
{

View File

@@ -125,7 +125,7 @@ sql0 = "SELECT {0} id, " // 1 query voor beide
+ " '{2}' lbl, "
+ " COUNT (*) val, "
+ " '' det "
+ " FROM ins_deel i, ins_srtdeel sd "
+ " FROM ins_v_deelenonderdeel i, ins_srtdeel sd "
+ " WHERE i.ins_deel_verwijder IS NULL "
+ " AND i.ins_srtdeel_key = sd.ins_srtdeel_key"
+ " AND sd.ins_srtdeel_verwijder IS NULL "
@@ -139,7 +139,7 @@ sql0 = "SELECT {0} id, " // 1 query voor beide
+ " AND r.res_ins_deel_key = i.ins_deel_key) ";
sql1 = "SELECT {0} id, '> ' || ins_discipline_omschrijving lbl, COUNT (*) val, '' det "
+ " FROM ins_deel i, ins_discipline rd, ins_srtdeel sd "
+ " FROM ins_v_deelenonderdeel i, ins_discipline rd, ins_srtdeel sd "
+ " WHERE i.ins_discipline_key = rd.ins_discipline_key "
+ " AND i.ins_deel_verwijder IS NULL "
+ " AND sd.ins_srtdeel_verwijder IS NULL "

View File

@@ -19,7 +19,6 @@ FCLTHeader.Requires({ plugins:["jQuery", "suggest"], js: ["jQuery-ui.js"] });
function ruimte_list(pautfunction, params)
{
// De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
var addButton = [];
var authparams = alg.checkAutorisation();
// Met ALG* bepaal je wat je ziet (Read), met RUI* en TER* bepaal je wat je kunt wijzigen (Write).
var canAdd = (authparams.rmALGwritelevel < 9);
@@ -42,6 +41,19 @@ function ruimte_list(pautfunction, params)
var expalgincl = params.expalgincl;
var chkgeb = params.chkgeb;
var cnt_full = params.cnt_full;
var usingoccupationsensors = params.sensorstats;
// Het lijkt zinvol, ook voor onnodig performanceverlies, dat we deze alleen doen als we autorisatie hebben voor WEB_RESBAC of WEB_RESMSU
var showdeskreservationstats = params.resstats && (user.has("WEB_RESBAC") || user.has("WEB_RESMSU"))
var showroomreservationstats = params.resstats && (user.has("WEB_RESBAC") || user.has("WEB_RESMSU"));
if (showdeskreservationstats) {
// Fast check to see if we do have werkplekdisciplines
sql= "SELECT 1 FROM res_discipline WHERE ins_discipline_min_level = 5 AND ins_discipline_verwijder IS NULL AND ROWNUM = 1";
oRs = Oracle.Execute(sql);
showdeskreservationstats = !oRs.eof;
oRs.close();
}
%>
<html>
@@ -141,11 +153,29 @@ function ruimte_list(pautfunction, params)
+ " AND sn.fac_srtnotificatie_xmlnode = 'ruimte'"
+ " ) recentdatum"
+ flexParams.sql
+ (usingoccupationsensors
? ", sstats.total_person_hours"
+ ", sstats.avg_utilization_pct"
+ ", sstats.peak_occupied_desks"
: "")
+ (showdeskreservationstats
? ", dstats.total_reserved_hours_desk"
+ ", dstats.avg_reserved_count_desk"
+ ", dstats.peak_reserved_count_desk"
: "")
+ (showroomreservationstats
? ", rstats.total_reserved_hours_room" // hoeveel uur in de afgelopen 90 dagen
+ ", rstats.avg_persons_per_reservation" // gemiddeld aantal deelnemers per reservering
+ ", rstats.avg_reservation_duration_hours" // gemiddelde reserveringsduur
: "")
+ " FROM alg_ruimte r"
+ ", alg_verdieping v"
+ ", alg_gebouw g"
+ ", alg_locatie l"
+ ", alg_srtruimte s"
+ (usingoccupationsensors ? ", ins_v_room_occupancy_kpis sstats" : "")
+ (showdeskreservationstats ? ", res_v_desk_reservation_kpis dstats" : "")
+ (showroomreservationstats ? ", res_v_room_simple_kpis rstats" : "")
+ " WHERE v.alg_verdieping_key = r.alg_verdieping_key "
+ " AND g.alg_gebouw_key = v.alg_gebouw_key "
+ " AND l.alg_locatie_key(+) = g.alg_locatie_key "
@@ -159,6 +189,9 @@ function ruimte_list(pautfunction, params)
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + authparams.ALGreadlevel + ")";
}
sqln += (usingoccupationsensors ? " AND r.alg_ruimte_key = sstats.alg_ruimte_key(+)" : "")
sqln += (showdeskreservationstats ? " AND r.alg_ruimte_key = dstats.alg_ruimte_key(+)" : "")
sqln += (showroomreservationstats ? " AND r.alg_ruimte_key = rstats.alg_ruimte_key(+)" : "")
sqln += getKenmerkSql("ALG", "r.alg_ruimte_key");
@@ -220,11 +253,13 @@ function ruimte_list(pautfunction, params)
var addurl = "appl/alg/alg_ruimte.asp?a=1";
addurl += buildTransitParam(["locatiekey", "gebouwkey", "verdiepingkey", "ruimtekey"], params) // TODO: welke allemaal?
var adButton = [];
var buttons = [];
if (canAdd)
{
addButton.push({ icon: "fa-plus", title: L("lcl_add"), action: "FcltMgr.openDetail('" + addurl + "', '" + safe.jsstring(L("lcl_add")) + "')" });
buttons.push({ icon: "fa-plus", title: L("lcl_add"), action: "FcltMgr.openDetail('" + addurl + "', '" + safe.jsstring(L("lcl_add")) + "')" });
}
buttons.push({ icon: "fa-columns", title: L("lcl_scf_columns"), action: "openColumns()"});
/**********************************
* Callback functies ResultsetTable
@@ -318,6 +353,7 @@ function ruimte_list(pautfunction, params)
keyColumn: "alg_ruimte_key",
ID: "algtable",
title: L("lcl_menu_alg_ruimte"),
tabs_code: "algruimte_list-x",
showAll: showall,
rowData: fnrowData,
rowClass: fnrowClass,
@@ -327,7 +363,7 @@ function ruimte_list(pautfunction, params)
flexId: "alg_ruimte_key",
flexParams: fnrowFlexParams,
filterParams: params,
buttons: addButton,
buttons: buttons,
roundtripCode: (canImport ? "ONRGOED2" : "")
});
@@ -356,6 +392,25 @@ function ruimte_list(pautfunction, params)
if (flexParams.anyflex)
rst.addColumn(new Column({caption: flexParams.flexlabel, content: fncolFlexBijlagen, colName: "fncolFlexBijlagen"}));
if (usingoccupationsensors)
{
rst.addColumn(new Column({caption: I("fa-sensor")+"&nbsp;"+L("lcl_alg_occupationsensor_ph"), content: "total_person_hours", datatype: "float"}));
rst.addColumn(new Column({caption: I("fa-sensor")+"&nbsp;"+L("lcl_alg_occupationsensor_au"), content: "avg_utilization_pct", datatype: "float"}));
rst.addColumn(new Column({caption: I("fa-sensor")+"&nbsp;"+L("lcl_alg_occupationsensor_po"), content: "peak_occupied_desks", datatype: "number"}));
}
if (showroomreservationstats)
{
rst.addColumn(new Column({caption: I("fa-calendar")+"&nbsp;"+L("lcl_alg_resstats_trhr"), content: "total_reserved_hours_room", datatype: "float"}));
rst.addColumn(new Column({caption: I("fa-calendar")+"&nbsp;"+L("lcl_alg_resstats_appr"), content: "avg_persons_per_reservation", datatype: "float"}));
rst.addColumn(new Column({caption: I("fa-calendar")+"&nbsp;"+L("lcl_alg_resstats_ardh"), content: "avg_reservation_duration_hours", datatype: "float"}));
}
if (showdeskreservationstats)
{
rst.addColumn(new Column({caption: I("fa-chair-office")+"&nbsp;"+L("lcl_alg_wpresstats_trh"), content: "total_reserved_hours_desk", datatype: "float"}));
rst.addColumn(new Column({caption: I("fa-chair-office")+"&nbsp;"+L("lcl_alg_wpresstats_arc"), content: "avg_reserved_count_desk", datatype: "float"}));
rst.addColumn(new Column({caption: I("fa-chair-office")+"&nbsp;"+L("lcl_alg_wpresstats_prc"), content: "peak_reserved_count_desk", datatype: "number"}));
}
rst.addAction({ action: "ruimteEdit", caption: L("lcl_edit"), isDefault: true });
rst.addAction({ action: "ruimteEditMulti", caption: L("lcl_alg_multi_edit"), multi: true, multiOnce: true, single: false, enabler: "eEditMulti"});
rst.addAction({ action: "doDelete", caption: L("lcl_delete"), multi: true, single: !noref, enabler: "eDelete" });

View File

@@ -14,6 +14,7 @@
<%
FCLTHeader.Requires({ plugins:["jQuery", "kenmerk"] });
// pre-filters
var locatie_key = getQParamInt("locatie_key", -1); // Locatie
var gebouw_key = getQParamInt("gebouw_key", -1); // Gebouw
var verdieping_key = getQParamInt("verdieping_key", -1); // Verdieping
@@ -21,12 +22,15 @@ var ruimte_key = getQParamInt("ruimte_key", -1); // ruimte
var ruimte_nr = getQParam("ruimte_nr", "");
var ruimte_use = getQParamInt("ruimte_use", -1); // Ruimtefunctie
var ruimte_descr = getQParam("ruimte_descr", "");
// behaviour
var autosearch = getQParamInt("autosearch", 0) == 1;
var alg_startlevel = getQParamInt("alg_startlevel", 2); // Startlevel van plaatsselector, default Locatie
var chkgeb = getQParamInt("chkgeb", 0) == 1;
var chkgeb = getQParamInt("chkgeb", 0) == 1; // Controleer tegen de vervallenstatus van het bovenliggende gebouw (vertrouw lvl_key/geb_key niet)
var cnt_full = getQParamInt("cnt_full", 1);
var sensorstats = getQParamInt("nosensorstats", 0) == 0;
var resstats = getQParamInt("noresstats", 0) == 0;
var authparams = alg.checkAutorisation();
%>
<html>
<head>
@@ -79,6 +83,7 @@ var authparams = alg.checkAutorisation();
filtercode: "INCVR",
whenEmpty: L("lcl_search_generic") // want filter
});
RWCHECKBOXTR("expAlgIncl", "fld", L("lcl_alg_ruimte_vervallen_incl"), false, { html: " value='1' ", boxfirst: true, twocols: true});
SEARCH_BLOCK_END();
SEARCH_BLOCK_START();
%>
@@ -88,7 +93,7 @@ var authparams = alg.checkAutorisation();
</tr>
<tr class="primsearch">
<td class="label"><label for="descr"><%=L("lcl_estate_ruimte_man_descr")%></label></td>
<td><input type="text" class="fldsrch fldshort" name="descr" value="<%=safe.htmlattr(ruimte_descr)%>"></td>
<td><input type="text" class="fldsrch fld" name="descr" value="<%=safe.htmlattr(ruimte_descr)%>"></td>
</tr>
<%
@@ -120,16 +125,14 @@ var authparams = alg.checkAutorisation();
filtercode: "AR"
});
}
%>
<!-- Vervallen ruimten -->
<tr class="primsearch">
<td></td>
<td align=left>
<input type="checkbox" class="fld" name="expAlgIncl" id="expAlgIncl" value="1" >
<label for="expAlgIncl"><%=L("lcl_alg_ruimte_vervallen_incl")%></label>
</td>
</tr>
<%
if (sensorstats && (S("ins_occupationsensors_srtgroep_key") > 0))
{
RWCHECKBOXTR("sensorstats", "fld", L("lcl_alg_sensorstats"), false, { html: " value='1' ", boxfirst: true, twocols: true});
}
if (resstats && (user.has("WEB_RESBAC") || user.has("WEB_RESMSU")))
{
RWCHECKBOXTR("resstats", "fld", L("lcl_alg_resstats"), false, { html: " value='1' ", boxfirst: true, twocols: true});
}
SEARCH_BLOCK_END();
SIMPLE_BLOCK_START();

View File

@@ -52,6 +52,8 @@ ruimte_list ( "*",
dept_key_arr: dept_key_arr,
noref: (noref != -1? noref : null),
expalgincl: expalgincl,
sensorstats: getQParamInt("sensorstats", 0) == 1,
resstats: getQParamInt("resstats", 0) == 1,
chkgeb: chkgeb
}
);

View File

@@ -11,6 +11,7 @@
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="../Shared/timezoneselector.inc" -->
<!-- #include file="alg_flexkenmerk.inc" -->
<!-- #include file="alg.inc" -->
@@ -49,6 +50,8 @@ var pst_land = oRs("alg_locatie_post_land").Value;
var loc_deleted = oRs("alg_locatie_verwijder").Value != null;
var vervaldatum = oRs("alg_locatie_vervaldatum").Value;
var dienstniveau_key = oRs("mld_dienstniveau_key").Value;
var alg_tz = oRs("alg_locatie_timezone").Value;
oRs.Close();
%>
<html>
@@ -136,6 +139,7 @@ oRs.Close();
BLOCK_START("facFM", L("lcl_operations_block"), {icon: "fa-users-cog"});
ROFIELDTR("fld", L("lcl_alg_locatie_volgnr"), loc_volgnr, {suppressEmpty: true});
FCLTtimezoneselector("", {initVal: alg_tz, readonly: true, suppressEmpty: true});
var fldcls = "fld";
if (vervaldatum <= new Date())
fldcls += " expired2";

View File

@@ -5,7 +5,7 @@
File: alg_show_regio.asp
Status:
Description:
Description:
Parameters: regio_key
*/ %>
@@ -49,11 +49,8 @@ var regio_deleted = regio_exists && !!regio_data.deleted;
function reg_delete()
{
FcltMgr.confirm(L("lcl_alg_del_txt_regio"), function() {
var data = {
action: "D"
};
<% protectRequest.dataToken("data"); %>
$.post($("form[name=u2]")[0].action,
var data = $("[name=u2]").serialize();
$.post("alg_edit_regio_save.asp?regio_key=<%=regio_data.id%>&action=D",
data,
FcltCallbackClose,
"json");
@@ -63,8 +60,8 @@ var regio_deleted = regio_exists && !!regio_data.deleted;
</head>
<body class="showmode">
<%
SUBFRAME_START();
<%
SUBFRAME_START();
var buttons = [];
if (!regio_deleted)
{
@@ -93,9 +90,9 @@ var regio_deleted = regio_exists && !!regio_data.deleted;
onrgoed_niveau : onrgoedlvl,
reado : true,
this_alg : this_alg });
%>
</form>
<% SUBFRAME_END(); %>
IFACE.FORM_END();
%> </form><%
SUBFRAME_END(); %>
</body>
</html>
<% ASPPAGE_END(); %>
<% ASPPAGE_END(); %>

View File

@@ -41,7 +41,6 @@ var sql = "SELECT ts.alg_locatie_key"
+ " , ts.alg_terreinsector_oppervlak"
+ " , ts.alg_terreinsector_omtrek"
+ " , ts.alg_terreinsector_aanmaak"
+ " , ts.alg_terreinsector_omschrijving"
+ " , ts.alg_terreinsector_ordernr"
+ " , ts.alg_terreinsector_image"
+ " , ts.alg_terreinsector_toon_telef"
@@ -59,6 +58,7 @@ var sql = "SELECT ts.alg_locatie_key"
+ " , prs_perslid_key_verantw2"
+ " , ts.alg_terreinsector_vervaldatum"
+ " , ts.alg_terreinsector_verwijder"
+ " , ts.mld_dienstniveau_key"
+ " FROM alg_terreinsector ts"
+ " WHERE ts.alg_terreinsector_key = " + ter_key;
var oRs = Oracle.Execute(sql);
@@ -71,7 +71,6 @@ var ter_sroms = oRs("srtterreinsector_oms").Value;
var ter_opp = oRs("alg_terreinsector_oppervlak").Value;
var ter_omt = oRs("alg_terreinsector_omtrek").Value;
var ter_aanmk = oRs("alg_terreinsector_aanmaak").Value;
var ter_oms = oRs("alg_terreinsector_omschrijving").Value;
var ter_ordnr = oRs("alg_terreinsector_ordernr").Value;
var ter_image = oRs("alg_terreinsector_image").Value;
var toon_telefoon = oRs("alg_terreinsector_toon_telef").Value;
@@ -85,6 +84,7 @@ var verantw_key = oRs("prs_perslid_key_verantw").Value;
var verantw2_key = oRs("prs_perslid_key_verantw2").Value;
var ter_deleted = oRs("alg_terreinsector_verwijder").Value != null;
var vervaldatum = oRs("alg_terreinsector_vervaldatum").Value;
var dienstniveau_key = oRs("mld_dienstniveau_key").Value;
oRs.Close();
%>
@@ -215,6 +215,20 @@ oRs.Close();
FILEPICKERTR("ter_image", L("lcl_alg_terreinsector_image"), ter_image, { "key": ter_key, "module": "ALGPHT", "readonly": true });
BLOCK_END();
BLOCK_START("algter4", L("lcl_alg_gebouw_facilitair"), {icon: "fa-users-cog"});
if (dienstniveau_key)
{
sql = "SELECT mld_dienstniveau_key"
+ " , " + lcl.xsqla("mld_dienstniveau_omschr", "mld_dienstniveau_key")
+ " FROM mld_dienstniveau"
+ " WHERE mld_dienstniveau_key = " + dienstniveau_key;
oRs = Oracle.Execute(sql);
ROFIELDTR("fld", L("lcl_mld_dienst_niveau"), oRs("mld_dienstniveau_omschr").value);
oRs.Close();
}
BLOCK_END();
if (!(ter_opp == null && ter_omt == null && vervaldatum == null))
{
BLOCK_START("algter4", L("lcl_alg_gebouw_fysiek"), {icon: "fa-ruler-combined"});

View File

@@ -31,7 +31,7 @@ if (ter_key > 0)
var loc_code = oRs("alg_locatie_code").value;
var ter_code = oRs("alg_terreinsector_code").value;
oRs.Close();
var ter_naam = " " + loc_code + "-" + ter_code;
}
else

View File

@@ -44,9 +44,9 @@
var result = api_gen_import(API, Request.BinaryRead(bytes));
xmlResp = result.xmldom;
if (API.apidata.errorhandling == 1)
if (API.apidata.errorhandling == 1 && user.errorhandling() == 1)
{
if (result.anyError) // een 'E' in imp_log
if (result.anyError) // een 'E' in imp_log
{
Response.Status = '400 Bad Request';
}

View File

@@ -289,7 +289,7 @@ function getEmailSetting(xmlReq, xmlParameters)
// - de afzender matcht of is niet specifiek gedefinieerd
// - het onderwerp matcht de conditie of is niet specifiek gedefinieerd
// - de verplichte bijlage is present of is niet specifiek gedefinieerd
// Het gevonden record levert de aan te roepen mailprocessor en
// Het gevonden record levert de aan te roepen mailprocessor en
// (bij de default fac.processemail) de aan te maken standaardmelding
while (!oRs.eof && !(hasRequiredAttachment && hasMatchingFrom && hasMatchingSubject))
@@ -315,7 +315,7 @@ function getEmailSetting(xmlReq, xmlParameters)
var expireResult = checkExpire(emlSetting.expire);
var senderResult = checkSender(emlSetting, xmlParameters);
var subjectResult = checkSubject(emlSetting, xmlParameters);
hasMatchingFrom = senderResult.success;
hasMatchingSubject = subjectResult.success;
__Log('hasMatchingFrom '+ hasMatchingFrom);
@@ -373,11 +373,11 @@ function emailAction(emlSetting, xmlParam, resultParam)
}
var actionsql =
"BEGIN " + emlSetting.action + " (" + safe.quoted_sql(emlSetting.theFrom) + ","
+ safe.quoted_sql(xmlParam.toAddr) + ","
+ safe.quoted_sql(xmlParam.Subject || L("lcl_fac_hmail_no_subject")) + "," // de actions kunnen slecht tegen lege subject
"BEGIN " + emlSetting.action + " (" + safe.quoted_sql(emlSetting.theFrom) + ", "
+ safe.quoted_sql(xmlParam.toAddr) + ", "
+ safe.quoted_sql(xmlParam.Subject || L("lcl_fac_hmail_no_subject")) + ", " // de actions kunnen slecht tegen lege subject
+ "?, "
+ safe.quoted_sql(xmlParam.sessionId) + ","
+ safe.quoted_sql(xmlParam.sessionId) + ", "
+ emlSetting.key + ");"
+ "END;";
@@ -476,7 +476,7 @@ function emailAction(emlSetting, xmlParam, resultParam)
return result;
}
//
//
function checkAttach(xmlReq, xmlParameter, emlSetting)
{
var requiredFound = false;

View File

@@ -733,7 +733,7 @@ function upsertKenmerk(kenmerken, stdmld_key, mld_key)
xmlResp.appendChild(FCLTElement);
if (API.apidata.errorhandling == 1)
if (API.apidata.errorhandling == 1 && user.errorhandling() == 1)
{
if (resultcode > 0) // -1 en 0 zijn 'goed'
{

View File

@@ -121,6 +121,7 @@ for (var i = 0; i < opdrachten.length; i++)
var onderwerp = XMLval(opdrachten[i], "onderwerp"); // NEW
var opdr_kpn = XMLval(opdrachten[i], "kostenplaats");
var flag = parseInt(XMLval(opdrachten[i], "flag"), 10);
var actiecode = parseInt(XMLval(opdrachten[i], "actiecode"), 10);
var txt_mut_datum = XMLval(opdrachten[i], "mut_datum"); // UPD
var opdrstatus = XMLval(opdrachten[i], "status"); // UPD
@@ -882,6 +883,12 @@ for (var i = 0; i < opdrachten.length; i++)
if (oRs("lopend").Value == 0)
{ // Er zijn alleen opdrachten met status 1 (Afgewezen) of 6/9 (Afgemeld/Afgerond)
// Check of setting bij opdrachttype automatisch sluiten ALTIJD (= 2) toestaat.
// Ondertussen kan de status van de opdracht aangepast zijn.
// De waarde this_mld.canClose kan daarom niet meer juist zijn omdat deze van de status afhankelijk is.
// Daarom moet de waarde opnieuw bepaald worden (PROR#90212 / PROR#90706).
var this_mld2 = mld.func_enabled_melding(mld_opdr.mld_key);
tsql = "SELECT mld_typeopdr_sluitmelding FROM mld_typeopdr"
+ " WHERE mld_typeopdr_key = " + topdr_key;
var oRs = Oracle.Execute(tsql);
@@ -889,7 +896,7 @@ for (var i = 0; i < opdrachten.length; i++)
// Afhankelijk van sluitmelding nu melding status zetten (0=nooit, 1=vragen en 2=altijd)
// Als de laatste opdracht een cancel was dan wordt de melding niet afgemeld.
if ((oRs("mld_typeopdr_sluitmelding").Value == 2 || oRs("mld_typeopdr_sluitmelding").Value == 1)
&& this_mld.canClose
&& this_mld2.canClose
&& opdrstatus != 'ORDCAN')
{
mld.setmeldingstatus (mld_key, 5); // Afgemeld
@@ -916,17 +923,48 @@ for (var i = 0; i < opdrachten.length; i++)
if (resultcode == -1) // Nog steeds geen fouten.
{
var tracking_key = coalesce(coalesce(status_tracking_key, datum_tracking_key), update_tracking_key); // volgorde van belangrijkheid
add_note(tracking_key); // voor als nog niet eerder gebeurd
// Alleen als er een notitie is aangemaakt mag ik de actiecode ook aanpassen.
if (note_key > 0)
{ // Er is een notitie aangemaakt.
// Actie bij +1=FOBO behandelaar, +2=melder, +4=uitvoerende, +128=attentie FOBO, +512=attentie uitvoerende.
if (resultcode == -1 && !isNaN(actiecode) && actiecode >= 0)
{ // Actie code.
var newActiecode = 0;
if ((actiecode & 128) == 128)
{
newActiecode += 128; // BO attentie
}
var BOactie = false;
if (S("mld_opdr_actiecode") > 0 && ((actiecode & 1) == 1))
{
newActiecode += 1; // + BO actie
BOactie = true;
}
var sql = "UPDATE mld_opdr"
+ " SET mld_opdr_actiecode = mld_opdr_actiecode" // Bestaande bitjes zoals 512 mag niet verloren gaan.
+ " + " + newActiecode
+ " - BITAND(mld_opdr_actiecode, " + newActiecode + ")" // Als het bitje 1 of 128 al gezet was dan deze waarde weer in minderinig brengen.
+ (BOactie
? " - BITAND(mld_opdr_actiecode, 6)" // Van de bitjes 1+2+4 (=7) moet er altijd 1 aan staan. Als we bitje 1 zetten, dan moeten we bitjes 2 of 4 wissen.
: "") // Bitje 1 is niet gezet. Bitjes 2 en 4 ongemoeit laten.
+ " WHERE mld_opdr_key = " + mld_opdr.opdr_key;
Oracle.Execute(sql);
}
}
resultcode = 0; // Ik heb gedaan wat ik moest en mocht doen voor deze opdracht.
}
else if (resultcode > 0)
{
var logtxt = "api_opdrsoap fail.\nResultcode: {0}\nReturntekst: {1}\nOpdracht: {2}\nOldstatus: {3}".format(resultcode, resulttekst, opdrid, oldstatus);
if (resulttekst.match(/^Not authorized/)) // Dit komt heel vaak voor door updates op gesloten opdrachten.
__Log(logtxt); // Het vervuilt de logfile veel te veel
__Log(logtxt); // Het vervuilt de logfile veel te veel
else
__DoLog(logtxt, "#00FF00");
}
@@ -1407,7 +1445,7 @@ function upsertOpdrRegels(regels, mld_opdr)
xmlResp.appendChild(FCLTElement);
if (API.apidata.errorhandling == 1)
if (API.apidata.errorhandling == 1 && user.errorhandling() == 1)
{
if (resultcode > 0) // -1 en 0 zijn 'goed'
{

View File

@@ -91,10 +91,10 @@ function L(p_lcl)
toonFoto: true,
detailurl: "appl/fac/fac_user_info.asp",
deeplinkurl: "<%=safe.jsstring(site)%>/?nomenu=1&noheader=1&ihatetabs=1&JumpTo=",
fields: [ { lbl: "<%=L("lcl_prs_email")%>", val: "prs_perslid_email" },
{ lbl: "<%=L("lcl_pb_phone")%>", val: "prs_perslid_telefoonnr" },
{ lbl: "<%=L("lcl_pb_mobile")%>", val: "prs_perslid_mobiel" },
{ lbl: "<%=L("lcl_pb_afdeling")%>", val: "afdeling" }
fields: [ { lbl: L("lcl_prs_email"), val: "prs_perslid_email" },
{ lbl: L("lcl_pb_phone"), val: "prs_perslid_telefoonnr" },
{ lbl: L("lcl_pb_mobile"), val: "prs_perslid_mobiel" },
{ lbl: L("lcl_pb_afdeling"), val: "afdeling" }
]
};
<%
@@ -110,7 +110,7 @@ function L(p_lcl)
window.facilitor.show_phonebook = function(data, textStatus)
{
// Alle styling moet nog via classes
var closer = "<span onclick='$(\"#phonebookdetails\").hide()' style='float: right; cursor: pointer' title='<%=L("lcl_close_window")%>'>x</span>"
var closer = "<span onclick='$(\"#phonebookdetails\").hide()' style='float: right; cursor: pointer' title='<%=safe.htmlattr(L("lcl_close_window"))%>'>x</span>"
if (window.facilitor.phonebook_options.detailurl)
{
var jumpto = window.facilitor.phonebook_options.detailurl;

View File

@@ -1,201 +0,0 @@
<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: phonebook_js.asp
Description: Phonebook API
Levert een JavaScript bestand op.
Parameters:
Context:
Note:
*/
DOCTYPE_Disable = 1;
FCLTEXPIRES = 8*60; // geen database interactie tenslotte
THIS_FILE = "appl/api/phonebook_js.asp";
var EXPIRED_PASSWORD_OK = true; // performance
%>
<!-- #include file="../Shared/common.inc"-->
<!-- #include file="../api/api.inc" -->
<%
var API = new API_func();
var nojQuery = getQParam("nojQuery", 0)==1;
var suggesticon = getQParam("suggesticon", "");
var transitParam = "&fac_id="+Session("customerId") + buildTransitParam(["API", "APIKEY", "charset"]);
var proto = (Request.ServerVariables("SERVER_PORT") == "443")?"https":"http";
var sitenoroot = proto + "://" + Request.ServerVariables("SERVER_NAME");
var site = sitenoroot + rooturl;
Response.ContentType = "application/javascript";
//lcl.buildClientLCL();
// LET OP: Geen FcltMgr.js en dus niet (clientside) zelflerend
%>
window.facilitor = window.facilitor || {};
window.facilitor.LCL = {};
window.facilitor.LCL["lcl_shared_suggest_hint"] = "<%=safe.jsstring(L("lcl_shared_suggest_hint"))%>";
window.facilitor.LCL["lcl_shared_suggest_huidig"] = "<%=safe.jsstring(L("lcl_shared_suggest_huidig"))%>";
facilitor.phonebook = facilitor.phonebook || {};
function L(p_lcl)
{
if (p_lcl in window.facilitor.LCL)
return window.facilitor.LCL[p_lcl];
return "??" + p_lcl + "??";
}
(function() {
function getScript(src) {
document.write('<' + 'script src="<%=site%>/' + src + '"' +
' type="text/javascript"><' + '/script>');
}
function getCSS(src) {
document.write('<' + 'link rel="stylesheet" href="<%=site%>/' + src + '"' +
' type="text/css">');
}
var loadScriptTime = (new Date).getTime();
getCSS("appl/shared/suggest/suggest.css");
getCSS("appl/api/api.css");
<% if (!nojQuery) { /* kan conflicteren */ %>
getScript("appl/localscripts/jquery.min.js");
<% } %>
getScript("appl/shared/suggest/suggest_IE11.js?v=<%=safe.url(FCLTVersion)%>"); // FCLTVersion voor anti-caching. Timestamp is me te veel werk
<% if (API.apidata.cust_js) { %>
getScript("<%=API.apidata.cust_js%>");
<% } %>
window.facilitor.open_phonebook = function(key, naam)
{
if (key > 0)
jQuery.ajax({ type: "GET",
url: "<%=safe.jsstring(site)%>/appl/api/get_phonebook_info.asp?req_info=prs_perslid&prs_perslid_key=" + key + "<%=transitParam%>",
dataType: "jsonp",
success: window.facilitor.show_phonebook
});
else
$("#phonebookdetails").hide()
}
// De default waarden, werkt nog niet TODO
window.facilitor.phonebook_options =
{ detailWidth : 450,
toonFoto: true,
detailurl: "appl/fac/fac_user_info.asp",
deeplinkurl: "<%=safe.jsstring(site)%>/?nomenu=1&noheader=1&ihatetabs=1&JumpTo=",
fields: [ { lbl: "<%=L("lcl_prs_email")%>", val: "prs_perslid_email" },
{ lbl: "<%=L("lcl_pb_phone")%>", val: "prs_perslid_telefoonnr" },
{ lbl: "<%=L("lcl_pb_mobile")%>", val: "prs_perslid_mobiel" },
{ lbl: "<%=L("lcl_pb_afdeling")%>", val: "afdeling" }
]
};
<%
// kopieer de serverside overrules naar clientside
for (opt in API.apidata.options)
{
Response.Write("\nwindow.facilitor.phonebook_options['"+opt+"'] = "
+ "JSON.parse('"+ safe.jsstring(JSON.stringify(API.apidata.options[opt])) +"')");
}
%>
window.facilitor.show_phonebook = function(data, textStatus)
{
// Alle styling moet nog via classes
var closer = "<span onclick='$(\"#phonebookdetails\").hide()' style='float: right; cursor: pointer' title='<%=L("lcl_close_window")%>'>x</span>"
if (window.facilitor.phonebook_options.detailurl)
{
var jumpto = window.facilitor.phonebook_options.detailurl;
jumpto += (jumpto.indexOf("?")>=0)?"&":"?";
jumpto += "prs_key="+data.prs_perslid_key;
var link = window.facilitor.phonebook_options.deeplinkurl + escape(jumpto) + "&fac_id=<%=Session("customerId")%>";
var ahref = "<a href='"+link+"' target='_new'>"+data.naam+"</a>"
}
else
ahref=date.naam;
var trh = "<tr><td></td><th colspan='2' class='title'>"+ahref+"</a></th><th></th></tr>"
var trs = "";
if (window.facilitor.phonebook_options.toonFoto && data.photopath)
{
trs += "<tr><td></td><td></td><td rowspan='50'><img alt='<%=safe.htmlattr(L("lcl_menu_prs_phonebook"))%>' src='<%=safe.jsstring(sitenoroot)%>" + data.photopaththumb.replace(/\'/g,'&#39;').replace(/\"/g,'&quot;') +"'></td></tr>";
}
var fld;
for (fld in window.facilitor.phonebook_options.fields)
{
var field = window.facilitor.phonebook_options.fields[fld];
if (field.val && data[field.val])
{
trs += "<tr><td class='label'>"+field.lbl+"</td>";
trs += " <td>"+data[field.val]+"</td></tr>";
}
if (field.fun)
trs += eval(field.fun + "(data)");
}
if (!document.getElementById("phonebookdetails"))
{
// Alle esthetische styling verloopt via de css
var dd = document.createElement('div');
dd.id = "phonebookdetails";
dd.style.position = "absolute";
dd.style.top = $("#sName_key_show").position().top+20 + "px";
dd.style.width = window.facilitor.phonebook_options.detailWidth + "px";
var newLeft = $("#sName_key_show").position().left;
if (newLeft + window.facilitor.phonebook_options.detailWidth > document.body.offsetWidth)
{ // Wel in beeld houden
newLeft = document.body.offsetWidth - window.facilitor.phonebook_options.detailWidth
}
dd.style.left = newLeft + "px";
document.body.appendChild(dd);
if (0)$("body").click // even niet, hij is te agressief
(
function(e)
{
if($(e.target).closest("#phonebookdetails").length==0)
{
$("#phonebookdetails").hide();
}
}
);
}
var dd = document.getElementById("phonebookdetails");
dd.innerHTML = ""+closer+"<table width='100%'>"+trh + trs+"</table>";
dd.style.display = "block";
}
window.facilitor.phonebook = function (elm, options)
{
var opt;
for (opt in options)
{
window.facilitor.phonebook_options[opt] = options[opt];
}
$(elm).append('<input id="sName_key_show" sgonChange="window.facilitor.open_phonebook" class="fldpers" value="">')
$(elm).append('<input type="hidden" id="sName_key" name="sName_key" value="-1">');
sgPerson = new Suggest({ objectName: "sgPerson",
queryField: $("#sName_key_show")[0],
queryUrl: "<%=safe.jsstring(site)%>/appl/shared/suggest/SuggestPerslid.asp?filtcode=PHB<%=transitParam%>",
initKey: -1,
noJustOne: true,
keyField: $("#sName_key")[0],
JSONP: true,
embedded: true,
suggesticon: "<%=safe.jsstring(suggesticon)%>",
site: "<%=safe.jsstring(site)%>"
});
};
})();
<% ASPPAGE_END(); %>

View File

@@ -372,7 +372,11 @@ api2_rest = {
jsondata["custom_fields"][0]["attachments"][0].datastream = bodyStream;
if (key == 0) // new record
{
var token = model.includes["custom_fields"].model.REST_POST(requestparams, jsondata.custom_fields[0], -1);
var result = model.includes["custom_fields"].model.REST_POST(requestparams, jsondata.custom_fields[0], -1);
var token = result.token;
// Bestandsnaam kan aangepast zijn.
jsondata.custom_fields[0].value = result.jsondata.value;
jsondata.custom_fields[0].attachments[0] = result.jsondata.attachments[0];
var record = { xflexparentkey: -1, propertyid: jsondata.custom_fields[0].propertyid};
var fileparams = { getFile: jsondata["custom_fields"][0].value, api2name: null, tmpfolder: token };
}
@@ -386,7 +390,7 @@ api2_rest = {
var data = model.includes["custom_fields"].model.get_file_info(requestparams, record, fileparams );
api2_rest.deliver(data, /* dummy model */ { record_name: "attachment" }, outputformat, true);
return;
return jsondata; // Attachment data teruggeven. Bestandsnaam kan aangepast zijn.
}
// Geen atachment dus door met de reguliere code
var data = model["REST_" + method](requestparams, jsondata, key);

View File

@@ -72,6 +72,12 @@ model_cnt_disc_params =
"label": L("cnt_discipline_factuurappr"),
"typ": "check0"
},
"bookinvoice": {
"dbs": "cnt_disc_params_factuurboeken",
"label": L("cnt_discipline_factuurboeken"),
"typ": "check0",
"defaultvalue": 1
},
"invoicelimit": { // "limit" is een reserved naam in API2
"dbs": "cnt_disc_params_factuurgrens",
"label": L("cnt_discipline_factuurgrens"),

View File

@@ -237,6 +237,17 @@ function model_custom_fields(formodel, flexModel, flexParams)
{
var attachment = jsondata.attachments[i];
var safefilename = safe.filename(attachment.name);
// iPad/IPhone uploaden directe foto altijd als 'Image.jpg' wat erg lastig is
// In dat geval bestandsnaam aanpassen.
var newfilename = renameIphoneIpadFiles(safefilename, i);
if (newfilename)
{
if (i == 0) jsondata.value = newfilename; // Gelijk aan het eerste bestand.
jsondata.attachments[i] = newfilename;
safefilename = newfilename;
}
if (flexparams.isAllowedName(safefilename))
{
CreateFullPath(flexparams.AttachPath);
@@ -252,12 +263,34 @@ function model_custom_fields(formodel, flexModel, flexParams)
attachment.content_base64 || attachment.content_hex,
fileencoding);
}
// resizen van bijlagen
var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
var fso = Server.CreateObject("Scripting.FileSystemObject")
var orgFile = flexparams.AttachPath + safefilename;
if (flexparams.regexp)
{
var resize_params = { resizecode: flexparams.regexp // "R800x600"
, attachpath: flexparams.AttachPath
, filename: safefilename
, safename: safefilename
, digest: oCrypto.hex_sha1_file(orgFile)
, isupload: false
, module: this.module
};
var resize_result = resizePicture(resize_params);
if (resize_result.newsize && (resize_result.newsize > 0))
{
tmpFile = resize_result.file_resized;
fso.DeleteFile(orgFile);
fso.MoveFile(tmpFile, orgFile);
}
}
// Toevoegen bijlage/bestand tracken.
trackBijlagen(this.module, parent_key, flexparams, {safefilename: [safefilename]}, "upload");
if (flexparams.fac_bijlagen)
{
var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
var fso = Server.CreateObject("Scripting.FileSystemObject")
var sql = "BEGIN "
+ " flx.setflexbijlage"
+ "(" + safe.quoted_sql(this.module) // MLD | RES | ....
@@ -266,9 +299,9 @@ function model_custom_fields(formodel, flexModel, flexParams)
+ ", " + safe.quoted_sql(flexparams.AttachSubPath)
+ ", " + "NULL" // diskfilename
+ ", " + safe.quoted_sql(safefilename)
+ ", " + fso.GetFile(flexparams.AttachPath + safefilename).Size
+ ", " + fso.GetFile(orgFile).Size
+ ", " + "SYSDATE"
+ ", " + safe.quoted_sql(oCrypto.hex_sha1_file(flexparams.AttachPath + safefilename))
+ ", " + safe.quoted_sql(oCrypto.hex_sha1_file(orgFile))
+ ");"
+ " END;";
Oracle.Execute(sql);
@@ -299,7 +332,7 @@ function model_custom_fields(formodel, flexModel, flexParams)
if (err.friendlyMsg)
api2.error(400, err.friendlyMsg);
}
return tmpfolder;
return {token: tmpfolder, jsondata: jsondata}; // Tijdelijke folder en attachment data teruggeven. Bestandsnaam kan aangepast zijn.
}
if (flexModel) // nog even niet voor MLD

View File

@@ -139,7 +139,10 @@ function model_fac_functie (functie_key, params)
this.groep_key = params.groep_key;
this.REST_DELETE = function (params, the_key) // we verwijderen niet het fac_functie record maar alle rechten er op.
{
var sql = "DELETE fac_groeprechten"
var autparams = user.checkAutorisation(this.autfunction);
user.auth_required_or_abort(autparams.PRSwritelevel < 9 && autparams.ALGwritelevel < 9);
var sql = "DELETE fac_groeprechten"
+ " WHERE fac_functie_key = " + the_key
+ " AND fac_groep_key = " + this.groep_key
+ " AND fac_functie_key NOT IN (SELECT fac_functie_key"

View File

@@ -216,7 +216,7 @@ function model_generic(table, autfunction)
var fld = oRs.Fields("column_name").Value;
if (fld == table.toLowerCase() + "_verwijder" || fld == 'ins_discipline_verwijder')
if (fld == table.toLowerCase() + "_verwijder" || fld == 'ins_discipline_verwijder' || fld == 'res_srtartikel_og_verwijder' || fld == 'res_ruimte_opstel_verwijder')
model.soft_delete = fld;
// Dan zien we hem ook nergens meer?

View File

@@ -780,6 +780,19 @@ function model_issues(mld_key, params)
if (!jsondata.treatmentteam)
jsondata.treatmentteam = stdm_info.default_ins_disc_key;
if (!jsondata.subject && stdm_info.subject == 3 && (S("ai_enabled") & 1)) { // AI generate the subject
var omschrijving = shared.stripbbcodes(jsondata.description || "");
var result = shared.promptAI(omschrijving, { "instructions": L("lcl_mld_ai_subject_instructions").format(stdm_info.mld_stdmelding_omschrijving) });
if (result.success) {
jsondata.subject = result.content;
this.fields["subject_ai"] = { dbs: "mld_melding_onderwerp_ai", typ: "varchar", val: jsondata.subject, len: 200 };
} else {
if (result.warning) {
__DoLog(result.warning, "#FF0000");
}
}
}
//
if (!jsondata.contact) jsondata.contact = user_key; // Als er geen aanvrager opgegeven is, dan de huidige gebruiker invullen.
// Als de setting niet is gezet is "Melding voor" gelijk aan contactpersoon.

View File

@@ -41,6 +41,7 @@ function model_alg_locatie()
"mjb_score" : { dbs: "alg_locatie_mjb_score1" , typ: "number" , "label": L("lcl_alg_locatie_mjb_score1")},
"coordinate_x" : { dbs: "alg_locatie_x" , typ: "number" , "label": L("lcl_geoxcoord")},
"coordinate_y" : { dbs: "alg_locatie_y" , typ: "number" , "label": L("lcl_geoycoord")},
"expires" : { dbs: "alg_locatie_vervaldatum" , typ: "date" , "label": L("lcl_alg_vervaldatum")},
"externnr" : { dbs: "alg_locatie_externnr" , typ: "varchar" , "label": L("extern_nr"), "readonly": !(user.has("WEB_FACTAB") || user.has("WEB_FACXNR")) },
"externsyncdate": { dbs: "alg_locatie_externsyncdate" , typ: "datetime" , "label": L("extern_syncdate"), "readonly": !(user.has("WEB_FACTAB") || user.has("WEB_FACXNR")) },
"seqnr" : { dbs: "alg_locatie_volgnr" , typ: "number" , "label": L("lcl_alg_locatie_volgnr") },

View File

@@ -37,7 +37,7 @@ function model_mld_discipline_discipline()
"required": true,
"insertonly": true,
"foreign": {
"tbl": "(SELECT ins_discipline_key, ins_discipline_omschrijving"
"tbl": "(SELECT ins_discipline_key, isd.ins_srtdiscipline_omschrijving || ' - ' || ins_discipline_omschrijving AS ins_discipline_omschrijving"
+ " FROM ins_srtdiscipline isd, ins_tab_discipline td, mld_disc_params dp"
+ " WHERE isd.ins_srtdiscipline_key = td.ins_srtdiscipline_key"
+ " AND td.ins_discipline_key = dp.mld_ins_discipline_key"
@@ -54,7 +54,7 @@ function model_mld_discipline_discipline()
"required": true,
"insertonly": true,
"foreign": {
"tbl": "(SELECT ins_discipline_key, ins_discipline_omschrijving"
"tbl": "(SELECT ins_discipline_key, ins_discipline_omschrijving || ' (' || ins_srtdiscipline_omschrijving || ')' AS ins_discipline_omschrijving"
+ " FROM ins_srtdiscipline isd, ins_tab_discipline td, mld_disc_params dp"
+ " WHERE isd.ins_srtdiscipline_key = td.ins_srtdiscipline_key"
+ " AND td.ins_discipline_key = dp.mld_ins_discipline_key"

View File

@@ -524,88 +524,129 @@ function model_mld_kenmerk(niveau, params)
}
}
var gparams = {"GET": {}};
if (isOpdrachtKenmerk)
{
gparams.GET = { wheres: [ "mld_kenmerk.mld_kenmerk_niveau IN ('P', 'O')" ] };
}
else
{
var sql_kenmerk = "SELECT mkm.mld_kenmerk_key"
+ " , mkm.mld_kenmerk_omschrijving"
+ " , msk.mld_srtkenmerk_key"
+ " , msk.mld_srtkenmerk_kenmerktype"
+ " , msk.mld_srtkenmerk_omschrijving"
+ " , s.mld_kenmerk_niveau"
+ " , s.ref_mld_stdmelding_key"
+ " , s.mld_stdmelding_key mld_mld_stdmelding_key"
+ " , s.mld_stdmelding_omschrijving"
+ " , s.ins_discipline_key discipline"
+ " , s.ins_srtdiscipline_key"
+ " , aantal"
+ " , aantal365"
+ " FROM mld_kenmerk mkm"
+ " , mld_srtkenmerk msk"
+ " , (SELECT 'S' mld_kenmerk_niveau"
+ " , mld_stdmelding_key ref_mld_stdmelding_key"
+ " , mld_stdmelding_key"
+ " , mld_stdmelding_omschrijving"
+ " , ins_discipline_key"
+ " , m2.ins_srtdiscipline_key"
+ " FROM mld_stdmelding md"
+ " , mld_discipline m2"
+ " WHERE md.mld_ins_discipline_key = m2.ins_discipline_key"
+ " AND mld_stdmelding_verwijder IS NULL"
+ " AND ins_discipline_verwijder IS NULL"
+ " UNION ALL"
+ " SELECT 'D' mld_kenmerk_niveau"
+ " , ins_discipline_key ref_mld_stdmelding_key"
+ " , NULL mld_stdmelding_key"
+ " , NULL mld_stdmelding_omschrijving"
+ " , ins_discipline_key ins_discipline_key"
+ " , ins_srtdiscipline_key"
+ " FROM mld_discipline m2"
+ " WHERE ins_discipline_verwijder IS NULL"
+ " UNION ALL"
+ " SELECT 'T' mld_kenmerk_niveau"
+ " , ins_srtdiscipline_key ref_mld_stdmelding_key"
+ " , NULL mld_stdmelding_key"
+ " , NULL mld_stdmelding_omschrijving"
+ " , NULL ins_discipline_key"
+ " , ins_srtdiscipline_key"
+ " FROM ins_srtdiscipline m2"
+ " UNION"
+ " SELECT 'A' mld_kenmerk_niveau"
+ " , NULL ref_mld_stdmelding_key"
+ " , NULL mld_stdmelding_key"
+ " , NULL mld_stdmelding_omschrijving"
+ " , NULL ins_discipline_key"
+ " , NULL ins_srtdiscipline_key"
+ " FROM DUAL"
+ " ) s"
+ " , (SELECT mld_kenmerk_key"
+ " , count(*) aantal"
+ " FROM mld_kenmerkmelding"
+ " GROUP BY mld_kenmerk_key"
+ " ) nn"
+ " , (SELECT mld_kenmerk_key"
+ " , count(*) aantal365"
+ " FROM mld_kenmerkmelding"
+ " WHERE mld_kenmerkmelding_aanmaak > SYSDATE - 365"
+ " GROUP BY mld_kenmerk_key"
+ " ) nn365"
+ " WHERE (mkm.mld_stdmelding_key = ref_mld_stdmelding_key OR mkm.mld_stdmelding_key IS NULL)"
+ " AND mkm.mld_kenmerk_niveau = s.mld_kenmerk_niveau"
+ " AND mkm.mld_srtkenmerk_key = msk.mld_srtkenmerk_key"
+ " AND mkm.mld_kenmerk_key = nn.mld_kenmerk_key(+)"
+ " AND mkm.mld_kenmerk_key = nn365.mld_kenmerk_key(+)";
gparams.GET = {
tables: [ "(" + sql_kenmerk + ") view_mld_kenmerk" ],
wheres: [ "mld_kenmerk.mld_kenmerk_key = view_mld_kenmerk.mld_kenmerk_key" ]
};
//this.REST_GET = generic_REST_GET(this, gparams);
this.REST_GET = function (params)
{
var gparams = {"GET": {}};
if (isOpdrachtKenmerk)
{
gparams.GET = { wheres: [ "mld_kenmerk.mld_kenmerk_niveau IN ('P', 'O')" ] };
}
else
{
var sql_kenmerk = "SELECT mkm.mld_kenmerk_key"
+ " , mkm.mld_kenmerk_omschrijving"
+ " , msk.mld_srtkenmerk_key"
+ " , msk.mld_srtkenmerk_kenmerktype"
+ " , msk.mld_srtkenmerk_omschrijving"
+ " , s.mld_kenmerk_niveau"
+ " , s.ref_mld_stdmelding_key"
+ " , s.mld_stdmelding_key mld_mld_stdmelding_key"
+ " , s.mld_stdmelding_omschrijving"
+ " , s.ins_discipline_key discipline"
+ " , s.ins_srtdiscipline_key"
+ " , aantal"
+ " , aantal365"
+ " FROM mld_kenmerk mkm"
+ " , mld_srtkenmerk msk"
+ " , (SELECT 'S' mld_kenmerk_niveau"
+ " , mld_stdmelding_key ref_mld_stdmelding_key"
+ " , mld_stdmelding_key"
+ " , mld_stdmelding_omschrijving"
+ " , ins_discipline_key"
+ " , m2.ins_srtdiscipline_key"
+ " FROM mld_stdmelding md"
+ " , mld_discipline m2"
+ " WHERE md.mld_ins_discipline_key = m2.ins_discipline_key"
+ " AND mld_stdmelding_verwijder IS NULL"
+ " AND ins_discipline_verwijder IS NULL"
+ " UNION ALL"
+ " SELECT 'D' mld_kenmerk_niveau"
+ " , ins_discipline_key ref_mld_stdmelding_key"
+ " , NULL mld_stdmelding_key"
+ " , NULL mld_stdmelding_omschrijving"
+ " , ins_discipline_key ins_discipline_key"
+ " , ins_srtdiscipline_key"
+ " FROM mld_discipline m2"
+ " WHERE ins_discipline_verwijder IS NULL"
+ " UNION ALL"
+ " SELECT 'T' mld_kenmerk_niveau"
+ " , ins_srtdiscipline_key ref_mld_stdmelding_key"
+ " , NULL mld_stdmelding_key"
+ " , NULL mld_stdmelding_omschrijving"
+ " , NULL ins_discipline_key"
+ " , ins_srtdiscipline_key"
+ " FROM ins_srtdiscipline m2"
+ " UNION"
+ " SELECT 'A' mld_kenmerk_niveau"
+ " , NULL ref_mld_stdmelding_key"
+ " , NULL mld_stdmelding_key"
+ " , NULL mld_stdmelding_omschrijving"
+ " , NULL ins_discipline_key"
+ " , NULL ins_srtdiscipline_key"
+ " FROM DUAL"
+ " ) s"
+ " , (SELECT mld_kenmerk_key"
+ " , count(*) aantal"
+ " FROM mld_kenmerkmelding"
+ " GROUP BY mld_kenmerk_key"
+ " ) nn"
+ " , (SELECT mld_kenmerk_key"
+ " , count(*) aantal365"
+ " FROM mld_kenmerkmelding"
+ " WHERE mld_kenmerkmelding_aanmaak > SYSDATE - 365"
+ " GROUP BY mld_kenmerk_key"
+ " ) nn365"
+ " WHERE (mkm.mld_stdmelding_key = ref_mld_stdmelding_key OR mkm.mld_stdmelding_key IS NULL)"
+ " AND mkm.mld_kenmerk_niveau = s.mld_kenmerk_niveau"
+ " AND mkm.mld_srtkenmerk_key = msk.mld_srtkenmerk_key"
+ " AND mkm.mld_kenmerk_key = nn.mld_kenmerk_key(+)"
+ " AND mkm.mld_kenmerk_key = nn365.mld_kenmerk_key(+)";
if ("filter" in params && params.filter.level == "N" && params.filter.mld_issuetype > 0)
{ // mld_stdmelding_key is bekend en men wil ALLE kenmerken zien die hierbij horen, dus ook van de bovenliggende niveau's.
var v_srtd_key = params.filter.disciplinetype;
var v_disc_key = params.filter.discipline;
var v_stdm_key = params.filter.mld_issuetype;
if (!v_srtd_key || !v_disc_key)
{ // Via API-endpoint alleen mld_issuetype meegegeven: de overige parameters dan maar zelf ophalen.
var sql = "SELECT m.mld_stdmelding_key"
+ " , d.ins_discipline_key"
+ " , d.ins_srtdiscipline_key"
+ " FROM mld_stdmelding m"
+ " , mld_discipline d"
+ " WHERE m.mld_ins_discipline_key = d.ins_discipline_key"
+ " AND m.mld_stdmelding_key = " + v_stdm_key;
var oRs = Oracle.Execute(sql);
if (!oRs.EOF)
{
v_stdm_key = oRs("mld_stdmelding_key").Value;
v_disc_key = oRs("ins_discipline_key").Value;
v_srtd_key = oRs("ins_srtdiscipline_key").Value;
}
oRs.Close();
}
sql_kenmerk += " AND ( (s.mld_stdmelding_key = " + v_stdm_key + ")"
+ " OR (s.ins_discipline_key = " + v_disc_key + " AND s.mld_stdmelding_key IS NULL)"
+ " OR (s.ins_srtdiscipline_key = " + v_srtd_key + " AND s.ins_discipline_key IS NULL)"
+ " OR (s.ins_srtdiscipline_key IS NULL)"
+ " )";
// Op deze key's niet meer filteren in de buitenste where-clause.
delete params.filter.disciplinetype;
delete params.filter.discipline;
delete params.filter.mld_issuetype;
delete params.filter.level;
}
gparams.GET = {
tables: [ "(" + sql_kenmerk + ") view_mld_kenmerk" ],
wheres: [ "mld_kenmerk.mld_kenmerk_key = view_mld_kenmerk.mld_kenmerk_key" ]
};
}
// Verder met de default
return generic_REST_GET(this, gparams)(params)
}
this.REST_GET = generic_REST_GET(this, gparams);
this.REST_POST = generic_REST_POST(this);
this.REST_PUT = generic_REST_PUT(this);
this.REST_DELETE = generic_REST_DELETE(this);

View File

@@ -111,6 +111,12 @@ function model_mld_melding_tag()
"foreign": "prs_perslid",
"defaultvalue" : user_key /* werk dit? */
},
"active": {
"dbs": "mld_melding_tag_actief",
"label": L("mld_melding_tag_actief"),
"typ": "check0",
"defaultvalue": 1
},
"begindate": {
"dbs": "mld_melding_tag_datum_van",
"label": L("mld_melding_tag_startdatum"),

View File

@@ -387,13 +387,13 @@ function model_mld_opdr()
"dbs": "mld_opdr_externnr",
"label": "externalnr",
"typ": "key",
"hidden_fld": true
"readonly": S("bgt_enabled") || !(user.has("WEB_FACTAB") || user.has("WEB_FACXNR"))
},
"externalsyncdate": {
"dbs": "mld_opdr_externsyncdate",
"label": "externalsyncdate",
"typ": "datetime",
"hidden_fld": true
"readonly": S("bgt_enabled") || !(user.has("WEB_FACTAB") || user.has("WEB_FACXNR"))
}
};
@@ -491,10 +491,10 @@ function model_mld_opdr()
}
oRs.Close();
/*
TWYN#53173
De bestaande knop "Kopi<70>ren" is komen te vervallen. Daarvoor in de plaats zijn twee nieuwe knoppen toegevoegd: "Nieuwe opdracht" en "nieuwe subopdracht".
Bij een nieuwe subopdracht is het opdrachtnummer gelijk aan die van de opdracht van waaruit gekopieerd wordt en is niet te wijzigen. Het volgnummer staat standaard op volgnr(max+1).
/*
TWYN#53173
De bestaande knop "Kopi<70>ren" is komen te vervallen. Daarvoor in de plaats zijn twee nieuwe knoppen toegevoegd: "Nieuwe opdracht" en "nieuwe subopdracht".
Bij een nieuwe subopdracht is het opdrachtnummer gelijk aan die van de opdracht van waaruit gekopieerd wordt en is niet te wijzigen. Het volgnummer staat standaard op volgnr(max+1).
if (obj._is_clone == 2)) // nieuw subcontract: bepaal hoogste volgnummer bij dit contract, en vul deze alvast in.
{
var sql = "SELECT COALESCE(MAX(s.mld_opdr_bedrijfopdr_volgnr), 0) + 1 volgnr"
@@ -508,7 +508,7 @@ Bij een nieuwe subopdracht is het opdrachtnummer gelijk aan die van de opdracht
obj.sequence = oRs("volgnr").Value;
oRs.Close();
}
*/
*/
}
else
{
@@ -614,11 +614,11 @@ Bij een nieuwe subopdracht is het opdrachtnummer gelijk aan die van de opdracht
checkAanwezigBudget(v_costtype);
getBudget(v_costtype); // Hierin wordt ook gecontroleerd of er een reservebudget bestaat. Zo niet, dan stoppen.
/*
TWYN#53173 : waarschijnlijk pas met 2018.1
obj._is_clone=1 --> nieuwe (hoofd) opdracht
obj._is_clone=2 --> nieuwe sub-opdracht
*/
/*
TWYN#53173 : waarschijnlijk pas met 2018.1
obj._is_clone=1 --> nieuwe (hoofd) opdracht
obj._is_clone=2 --> nieuwe sub-opdracht
*/
if (isclone) // Bij kopie van opdracht geen nieuw nummer genereren.
{
var v_project_key = (typeof obj.budgetproject == "object" ? obj.budgetproject.id : obj.budgetproject);
@@ -1004,6 +1004,27 @@ obj._is_clone=2 --> nieuwe sub-opdracht
result.canRead = (pparams.authparams.PRSreadlevel < 9 && pparams.authparams.ALGreadlevel < 9);
result.canWrite = (pparams.authparams.PRSwritelevel < 9 && pparams.authparams.ALGwritelevel < 9);
result.canReadWrite = result.canRead || result.canWrite;
if (pparams.filter.mld_key && pparams.filter.mld_key > 0)
{
var sql = "SELECT s.mld_ins_discipline_key"
+ " FROM mld_melding m"
+ " , mld_stdmelding s"
+ " WHERE m.mld_stdmelding_key = s.mld_stdmelding_key"
+ " AND m.mld_melding_key = " + pparams.filter.mld_key;
var oRs = Oracle.Execute(sql);
var mld_disc_key = oRs("mld_ins_discipline_key").Value;
oRs.Close();
pparams.enabled = user.func_enabled2("MLD", { ins_discipline_key: mld_disc_key, prs_key: user_key, isOptional:true });
result.canWrite = pparams.enabled.anyfound;
}
else
{
result.canRead = false;
result.canWrite = false;
result.canReadWrite = false;
}
}
}
return result; // Wordt in model gebruikt om te bepalen of de functies/knoppen Toevoegen en Verwijderen aanwezig moeten zijn.
@@ -1385,7 +1406,7 @@ obj._is_clone=2 --> nieuwe sub-opdracht
}
}
this.REST_GET = function (params)
this.REST_GET = function (params)
{
if (S("bgt_enabled") == 1)
{ // autfunction = "WEB_BGTORD".
@@ -1608,8 +1629,6 @@ obj._is_clone=2 --> nieuwe sub-opdracht
delete_fld(jsondata, "module", true);
delete_fld(jsondata, "additional", true);
delete_fld(jsondata, "offer", true);
delete_fld(jsondata, "externalnr", true);
delete_fld(jsondata, "externalsyncdate", true);
}
this.REST_PUT = function (params, jsondata, the_key)
@@ -1769,7 +1788,11 @@ obj._is_clone=2 --> nieuwe sub-opdracht
{
if (!S("bgt_enabled")) // Nu pas voor API2 controleren. Voor BGT is canWrite hier zeker true.
{
var auth_par = { filter: { id: getQParamInt("id", -1), scope: getQParamSafe("scope", "")}};
var auth_par = { filter: { mld_key: jsondata.issue
, id: getQParamInt("id", -1)
, scope: getQParamSafe("scope", "")
}
};
var this_par = { autfunction: true};
var authparams_cA = _checkAutorisation(this_par, auth_par);
if (!authparams_cA.canWrite)

View File

@@ -497,6 +497,14 @@ function model_mld_stdmelding()
"emptyoption": null,
"multiedit": true
},
"objectsallowed": {
"dbs": "mld_stdmelding_objects_allowed",
"typ": "number",
"label": L("mld_stdmelding_objects_allowed"),
"LOV": L("mld_stdmelding_objects_allowed_LOV"),
"emptyoption": null,
"defaultvalue": 2
},
"externallink": {
"dbs": "mld_stdmelding_externurl",
"typ": "varchar",

View File

@@ -265,6 +265,12 @@ function model_mld_typeopdr()
"label": L("lcl_mld_code"),
"typ": "varchar",
"readonly": !user.has("WEB_FACTAB")
},
"complete": {
"dbs": "mld_typeopdr_afronden",
"label": L("mld_typeopdr_complete"),
"typ": "check0",
"defaultvalue": 1
}
};

View File

@@ -100,47 +100,47 @@ function model_objects(ins_key, params)
};
var module = "INS"; // INS of SLE.
function _check_authorization(params, method)
{
var urole = "fe"; // TODO: Moet echt niet ter zake doen
var autfunction = urole == "fe"? "WEB_INSUSE" : "WEB_INSMAN";
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
var ins_key = params.filter.id || -1;
var urole = params.filter.scope || "fe";
params.message = "";
params.message = "";
params.filter.scope = params.filter.scope || "fe";
var module = "INS";
var ins_key = params.filter.id || -1;
var srtdeel_key = -1;
var srtgroep_key = -1;
var autfunction = ( params.filter.scope == "fe"
? "WEB_INSUSE"
: ( params.filter.scope == "fo"
? "WEB_INSFOF"
: "WEB_INSMAN"
));
// Voor sleutels/cilinders:
if ( (ins_key > 0 && ins.isSleCil(ins_key))
|| (srtdeel_key > 0 && ins.isSleCil(srtdeel_key, "S"))
|| (srtgroep_key > 0 && ins.isSleCil(srtgroep_key, "G"))
)
{
autfunction = "WEB_SLEBOF";
module = "SLE";
}
var srtdeel_key = -1;
var srtgroep_key = -1;
// Heb ik rechten voor 1 van de INS autorisaties. Onafhankelijk van de urole.
var autfunction = ["WEB_INSUSE", "WEB_INSFOF", "WEB_INSMAN"];
// Voor sleutels/cilinders:
if ( (ins_key > 0 && ins.isSleCil(ins_key))
|| (srtdeel_key > 0 && ins.isSleCil(srtdeel_key, "S"))
|| (srtgroep_key > 0 && ins.isSleCil(srtgroep_key, "G"))
)
{
autfunction = "WEB_SLEBOF";
module = "SLE";
}
if (ins_key > 0)
{
var this_ins = ins.func_enabled_deel(ins_key, {urole: params.filter.scope});
user.auth_required_or_abort(this_ins.canChange || this_ins.canChangeOwn); // dat is toch wel het minste
params.authparams = this_ins.authparams(autfunction);
}
else
{
params.authparams = user.checkAutorisation(autfunction); // , null, null, true); // pessimistisch
var this_ins = { canChangeAlg: true };
}
switch (method)
{
case "GET": if (ins_key > 0)
{
var this_ins = ins.func_enabled_deel(ins_key, {urole: urole});
user.auth_required_or_abort(this_ins.canReadAny); // dat is toch wel het minste
}
else
{
var this_ins = { canChangeAlg: true };
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
}
break;
case "PUT":
case "POST": var this_ins = ins.func_enabled_deel(ins_key, {urole: urole});
user.auth_required_or_abort(this_ins.canChange || this_ins.canChangeOwn); // dat is toch wel het minste
break;
}
params.func_enabled = this_ins || {};
params.func_enabled = this_ins || {};
};
function _pre_analyze_fields(params, jsondata, method)
@@ -307,7 +307,7 @@ function model_objects(ins_key, params)
}
if (bindingBits & BIND_RUIMTE)
{
if(jsondata.room && jsondata.room > 0 )
if (jsondata.room && jsondata.room > 0 )
{
placeholder.status = true;
placeholder.ruimte_type = "R";
@@ -420,7 +420,9 @@ function model_objects(ins_key, params)
query.wheres.push(" ins_v_deelenonderdeel.ins_discipline_key IN"
+ " (SELECT ins_discipline_key"
+ " FROM fac_v_webgebruiker"
+ " WHERE fac_functie_key = " + params.authparams.autfunctionkey
+ (module == "INS"
? " WHERE fac_functie_key IN ({0}, {1}, {2})".format(F('WEB_INSUSE'), F('WEB_INSFOF'), F('WEB_INSMAN'))
: " WHERE fac_functie_key = " + F("WEB_SLEBOF"))
+ " AND prs_perslid_key = " + user_key
+ " AND fac_gebruiker_prs_level_read < 9"
+ " AND fac_gebruiker_alg_level_read < 9)");
@@ -435,7 +437,7 @@ function model_objects(ins_key, params)
{
query.tables.push("ins_v_deel_gegevens ins_v_deelenonderdeel_gegevens"); // voor het gemak alias ins_v_deelenonderdeel_gegevens
}
query.wheres.push("ins_v_deelenonderdeel.ins_alg_ruimte_type IN ('R', 'W', 'P') ");
query.wheres.push("ins_v_deelenonderdeel.ins_alg_ruimte_type IN ('T', 'R', 'W', 'P', 'A', 'C') ");
query.wheres.push("ins_v_deelenonderdeel_gegevens.ins_deel_key = ins_v_deelenonderdeel.ins_deel_key");
var wheres = api2.sqlfilter(params, this)

View File

@@ -1243,8 +1243,6 @@ function model_orders(opdr_key, params)
{ // Bij ORDNEW tracking wordt er niet genotificeerd. Dat moet als je mld_opdr_teverzenden op 1 zet nog gebeuren.
Oracle.Execute("BEGIN fac.notifytrackingbedrijven ('ORDNEW', " + opdr_key + "); END;");
}
var puo_result = putorders.sendMLDorders(opdr_key);
}
else if (params.mld_opdr.mld_typeopdr_confirm_for_send == 1)
{ // Gaat straks vragen: "Zal ik electronisch versturen?"

View File

@@ -39,6 +39,12 @@ function model_prs_bedrijfadres()
"label": L("lcl_key"),
"required": true
},
"template": {
"dbs": "prs_bedrijfadres_template",
"typ": "varchar",
"label": L("lcl_prs_bedrijfadres_template"),
"required": true
},
"company": {
"dbs": "prs_bedrijf_key",
"typ": "key",
@@ -92,7 +98,7 @@ function model_prs_bedrijfadres()
"dbs": "ins_discipline_key",
"typ": "key",
"label": L("mgt_discipline"),
"foreign": "mld_typeopdr",
"foreign": "MLD_DISCIPLINE",
"multiedit": true,
"track": true
},
@@ -321,7 +327,7 @@ function model_prs_bedrijfadres()
"startdate": {
"dbs": "prs_bedrijfadres_startdatum",
"label": L("prs_bedrijf_startdatum"),
"typ": "datetime",
"typ": "date",
"multiedit": true,
"defaultvalue": new Date(),
"track": true
@@ -378,7 +384,7 @@ function model_prs_bedrijfadres()
+ ";13;13"
};
this.hook_pre_edit = function (obj, fld) { %>
this.hook_pre_edit = this.hook_pre_multi_edit = function (obj, fld) { %>
<script type="text/javascript">
var email_regexp = new RegExp("<%=safe.jsstring(S("email_regexp"))%>", "ig");
</script>
@@ -408,6 +414,7 @@ function model_prs_bedrijfadres()
if (("encoding" in jsondata) && (jsondata.encoding < 0 || jsondata.encoding > 4)) {
abort_with_warning(L("mgt_validation_error_1").format(L("lcl_prs_bedrijfadres_encoding")));
}
var fso = Server.CreateObject("Scripting.FileSystemObject")
if (("address" in jsondata) && jsondata.address != "")
{
@@ -419,6 +426,10 @@ function model_prs_bedrijfadres()
jsondata.address = 'mailto:' + jsondata.address;
fout_adres = false;
}
else if (arr.length == 1 && jsondata.address.substring(0,1) == '@') // intern, bijvoorbeeld @/appl/exp/zendesk.asp
{
fout_adres = !fso.FileExists(Server.MapPath("../.." + jsondata.address.substring(1)));
}
else if (arr.length > 1)
{
switch (arr[0])
@@ -439,7 +450,6 @@ function model_prs_bedrijfadres()
}
// bestaat de ingevulde xsl-file
var fso = Server.CreateObject("Scripting.FileSystemObject")
var xsl = jsondata.stylesheet || "";
if (xsl && !fso.FileExists(Server.MapPath(custpath) + "/" + xsl)) // Zo doet puo_xmltools/ SafeLoadFileXSL dat
abort_with_warning(xsl + " not found");

View File

@@ -181,7 +181,8 @@ function model_reportcolumns(usrrap_key, params)
this.fields.filter.LOV = api2.filterLOV(L("lcl_rap_filterLOV"), "A,E,R,RR,P"); // De meesten mogen L(ike) niet
if ((obj.datatype && !obj.expression))
{
var datatype_id = (obj.datatype.id == "varchar" && getOrgDatatype(obj.fac_usrrap_key, obj.name) == "number" ? "number" : obj.datatype.id);
var orgDatatype = getOrgDatatype(obj.fac_usrrap_key, obj.name);
var datatype_id = (obj.datatype.id == "varchar" && orgDatatype == "number" ? "number" : obj.datatype.id);
switch (datatype_id)
{
case "date":
@@ -190,13 +191,19 @@ function model_reportcolumns(usrrap_key, params)
this.fields.datatype.LOV = api2.filterLOV(L("lcl_rap_datatypeLOV"), "date,datetime,time");
break;
case "time":
this.fields.group.LOV = api2.filterLOV(L("lcl_rap_groupbyLOV"), "G,H");
this.fields.group.LOV = api2.filterLOV(L("lcl_rap_groupbyLOV"), "G,H");
this.fields.datatype.LOV = api2.filterLOV(L("lcl_rap_datatypeLOV"), "date,datetime,time");
break;
case "varchar":
this.fields.group.LOV = api2.filterLOV(L("lcl_rap_groupbyLOV"), "G");
this.fields.datatype.readonly = true;
this.fields.filter.LOV = L("lcl_rap_filterLOV"); // die mag alle filters
if (orgDatatype == "number" || orgDatatype == "float" || orgDatatype == "currency") {
this.fields.group.LOV = api2.filterLOV(L("lcl_rap_groupbyLOV"), "G,S,C,A");
this.fields.datatype.readonly = false;
this.fields.datatype.LOV = api2.filterLOV(L("lcl_rap_datatypeLOV"), "varchar,number,float,currency");
} else {
this.fields.group.LOV = api2.filterLOV(L("lcl_rap_groupbyLOV"), "G");
this.fields.datatype.readonly = true;
this.fields.filter.LOV = L("lcl_rap_filterLOV"); // die mag alle filters
}
break;
case "html":
this.fields.group.LOV = api2.filterLOV(L("lcl_rap_groupbyLOV"), "G");

View File

@@ -404,8 +404,10 @@ function model_reportsx(usrrap_key, rapparams)
+ (query.wheres.length ? " WHERE " + query.wheres.join(" AND " ) : "")
+ " ORDER BY fac_usrrap_volgnr NULLS LAST, fac_usrrap_omschrijving";
// Srikt op volgnr sluit niet aan bij de functionaliteit, de onzichtbaren mogen onderaan
// "V;Visible;I;Invisible;H;hidden;S;Suppress repetitions"
if (params.include && params.include.length && inArray("columns", params.include))
sql += ", fac_usrrap_cols_volgnr";
sql += ", DECODE(fac_usrrap_cols_visible,'H',9, 'I', 5, 1), fac_usrrap_cols_volgnr";
var json = api2.sql2json (params, sql, this);
if (json.length == 1)

View File

@@ -20,6 +20,7 @@ function model_res_srtartikel_onrgoed()
this.table = "res_srtartikel_onrgoed";
this.primary = "res_srtartikel_onrgoed_key";
this.soft_delete = "res_srtartikel_og_verwijder";
this.soft_expire = "res_srtartikel_og_vervaldatum";
this.autfunction = "WEB_RESMSU";
this.record_title = L("res_srtartikel_onrgoed");
this.records_title = L("res_srtartikel_onrgoed_m");
@@ -77,6 +78,18 @@ function model_res_srtartikel_onrgoed()
"friendlyname": true,
"foreignfiltercode": null, // Ook facilitor irrelevant
"showtransit": true
},
"startdate": {
"dbs": "res_srtartikel_og_ingangsdatum",
"label": L("res_artikel_ingangsdatum"),
"typ": "date",
"multiedit": true
},
"expirationdate": {
"dbs": "res_srtartikel_og_vervaldatum",
"label": L("res_artikel_vervaldatum"),
"typ": "date",
"multiedit": true
}
};
@@ -86,7 +99,7 @@ function model_res_srtartikel_onrgoed()
this.REST_GET = generic_REST_GET(this);
this.REST_POST = generic_REST_POST(this);
//this.REST_PUT = generic_REST_PUT(this); // alle velden zijn insertonly
this.REST_PUT = generic_REST_PUT(this); // alle velden zijn insertonly
this.REST_DELETE = generic_REST_DELETE(this, {});
}
%>

View File

@@ -212,6 +212,11 @@ function model_visitors()
this.REST_DELETE = function (params, the_key) /* delete visitors */
{
var scope = params.filter.scope || "fe";
this.autfunction = { fe : "WEB_BEZUSE", fo : "WEB_BEZFOF", bo : "WEB_BEZBOF", mi : "WEB_RESBAC" } [scope];
var autparams = user.checkAutorisation(this.autfunction);
user.auth_required_or_abort(autparams.PRSwritelevel < 9 && autparams.ALGwritelevel < 9);
var pResult = new HookResult();
if (!custfunc.bez_predelete(the_key, pResult))

View File

@@ -0,0 +1,124 @@
<?xml version="1.0"?>
<component>
<public>
<!-- properties -->
<!-- methods -->
<method name="initialize">
<PARAMETER name="params"/>
</method>
<method name="transform_filter">
<PARAMETER name="filter"/>
</method>
<method name="transform_outgoing">
<PARAMETER name="params"/>
<PARAMETER name="data"/>
</method>
<method name="transform_incoming">
<PARAMETER name="params"/>
<PARAMETER name="data"/>
</method>
</public>
<script language="javascript">
<![CDATA[
/*
$Revision$
$Id$
API-Plugin om [nu nog] objecten te kunnen updaten "by name" in plaats van by id.
Intentie is om hiermee de drempel voor sensorgebruik te verlagen en onafhankelijker
te laten zijn van ons. inrichting, een consultant. Met een duidelijke beschrijving
kan een klant zelf sensoren beheren en de leverancier op een geloofwaardige manier
zelf aan laten sluiten op Facilitor.
Is een stap voorwaarts, maar mogelijk niet het eindstation. Dat zien we dan weer.
*/
/* properties */
/* methods */
/* Globals */
var FCLT;
function initialize(params)
{
FCLT = params;
}
function transform_filter(filter)
{
return filter;
}
// Interne functies
// Voor objecten, in het bijzonder sensorobjecten.
// Haalt de ins_deel_key op voor een gegeven deel_omschrijving.
// Alleen actief en niet-verwijderd records worden meegenomen.
// Als er exact 1 resultaat is, wordt de bijbehorende key teruggegeven.
// Als er geen of meerdere resultaten zijn, wordt -1 teruggegeven.
function getdeelkey(deelnaam)
{
var ins_deel_key = -1;
var sql = "SELECT ins_deel_key"
+ " FROM ins_deel"
+ " WHERE ins_deel_verwijder IS NULL"
+ " AND ins_deel_actief = 1"
+ " AND ins_deel_upper = " + FCLT.safe.quoted_sql_upper(deelnaam);
var oRs = FCLT.Oracle.Execute(sql);
if (!oRs.Eof)
{
ins_deel_key = oRs("ins_deel_key").Value;
// we moeten 1 en precies 1 object vinden bij deze beschrijving
// als het er meer zijn, dan vonden we hem de facto dus niet
// een maken we er alsnog -1 van.
oRs.moveNext();
if (!oRs.Eof)
ins_deel_key = -1;
}
oRs.Close();
return ins_deel_key;
}
function transform_incoming(params, data)
{
// Optie is om dit generiek te doen voor alle soorten objecten die we ondersteunen
// zodat we niet afzonderlijke deelidbyname, gebouwidbyname enz hoeven te hebben
// Weet niet hoe dat moet of kan.
if (data.objects)
{
// dan zijn er meerdere objecten tegelijk
for (var i = 0; i < data.objects.length; i++)
{
var thisobject = data.objects[i];
var ins_deel_omschrijving = thisobject.name;
FCLT.DEZE.__DoLog("IdByName plugin > in = "+FCLT.DEZE.JSON.stringify(thisobject))
var ins_deel_key = getdeelkey(ins_deel_omschrijving);
if (ins_deel_key) {
thisobject.id = ins_deel_key;
}
FCLT.DEZE.__DoLog("IdByName plugin > deze "+FCLT.DEZE.JSON.stringify(thisobject));
}
FCLT.DEZE.__DoLog("IdByName plugin > out "+FCLT.DEZE.JSON.stringify(data));
}
else
{
// Als het er eentje is, dan maak er een array van probeer het dan opnieuw
if (data.object)
{
return transform_incoming(params, {"objects": [data.object]});
}
}
return data;
}
function transform_outgoing(params, data)
{
return data;
}
]]>
</script>
</component>

View File

@@ -243,8 +243,7 @@ function setUserFromSession (p_session)
var sql = "SELECT fac_session_key, prs_perslid_key, fac_session_data "
+ " FROM fac_session "
+ " WHERE fac_session_expire > sysdate "
+ " AND fac_session_sessionid_hash IN ({0}, {1})".format(safe.quoted_sql(shared.makehashMD5(p_session)), // 30 dagen na de release mag de makehashMD5 weg
safe.quoted_sql(shared.makehash(p_session)));
+ " AND fac_session_sessionid_hash = " + safe.quoted_sql(shared.makehash(p_session));
var oRs = Oracle.Execute( sql );
if (!oRs.eof)
{

View File

@@ -55,7 +55,7 @@ checkUserAgent(); // heeft device capability bits gezet
<%
}
%>
window.parent.document.title = "<%=L("lcl_facilitor_ie_title")%>";
window.parent.document.title = L("lcl_facilitor_ie_title");
function login_callback(json)
{
if (json.success && json.otp_prompt)
@@ -231,12 +231,12 @@ checkUserAgent(); // heeft device capability bits gezet
%></div>
<% } %>
<div class="form-floating loginname">
<input class="form-control required" type="text" maxlength="256" id="visname" name="vis_name" autocomplete="off" value="<%=safe.jsstring(prs_email)%>" placeholder="<%=L("lcl_vis_log_name")%>">
<input class="form-control required" type="text" maxlength="256" id="visname" name="vis_name" autocomplete="off" value="<%=safe.jsstring(prs_email)%>" placeholder="<%=safe.htmlattr(L("lcl_vis_log_name"))%>">
<label for="visname"><%=L("lcl_vis_log_name")%></label>
</div>
<div class="form-floating loginpass">
<input class="form-control" type="password" <%=(S("mobile_password") == 1?" readonly ":"")%> maxlength="50" id="vispswd" autocomplete="off" name="vis_pswd" placeholder="<%=L("lcl_vis_log_psw")%>">
<input class="form-control" type="password" maxlength="50" id="vispswd" autocomplete="off" name="vis_pswd" placeholder="<%=L("lcl_vis_log_psw")%>">
<label for="vispswd"><%=L("lcl_vis_log_psw")%></label>
</div>
@@ -244,12 +244,6 @@ checkUserAgent(); // heeft device capability bits gezet
if (S("login_remember_days") > 0)
{
%><div class="form-group remember m-3">
<%
if (S("mobile_password") == 1
|| (S("mobile_password_pda") == 1 && device.test(device.isMobile))) {
%><span class="details mobkey" id="mobbutton" title="<%=L("lcl_password_to_mobile")%>" alt="SMS" onClick="passwrd2mobile();"><%=I("fa-sms fa-lg")%></span><%
}
%>
<input type="checkbox" id="remember" name="remember"><label class="rememberme" for="remember"><%=L("lcl_login_remember")%></label>
</div><%
}

View File

@@ -55,7 +55,7 @@ checkUserAgent(); // heeft device capability bits gezet
<%
}
%>
window.parent.document.title = "<%=L("lcl_facilitor_ie_title")%>";
window.parent.document.title = L("lcl_facilitor_ie_title");
function login_callback(json)
{
if (json.success)

View File

@@ -1,55 +0,0 @@
<%@language = "javascript" %>
<% /*
$Revision$
$Id$
Stuur een tijdelijk wachtwoord via SMS
*/
ANONYMOUS_Allowed = 1;
%>
<!--#include file="../Shared/common.inc"-->
<%
if (S("mobile_password") != 1
&& (S("mobile_password_pda") == 0 || !device.test(device.isMobile))
)
{
shared.simpel_page(L("lcl_no_auth"));
}
var pLogin = getQParam("login");
%>
<html>
<head>
<%
var code = shared.random(8, 'base32').toLowerCase(); // Effectief 40 bit/ 5 byte
sql = "UPDATE prs_perslid "
+ " SET prs_perslid_authenticatie = " + safe.quoted_sql(code)
+ " , prs_perslid_authenticatie_exp = sysdate + (1/(24*60))*"+S("mobile_password_exp")
+ " WHERE ( UPPER(prs_perslid_email) = " + safe.quoted_sql_upper(pLogin)
+ " OR UPPER(prs_perslid_oslogin) = " + safe.quoted_sql_upper(pLogin)
+ " )";
Oracle.Execute(sql);
sql = "SELECT prs_perslid_authenticatie, prs_perslid_mobiel"
+ " FROM prs_perslid"
+ " WHERE ( UPPER(prs_perslid_email) = " + safe.quoted_sql_upper(pLogin)
+ " OR UPPER(prs_perslid_oslogin) = " + safe.quoted_sql_upper(pLogin)
+ " )"
+ " AND prs_perslid_mobiel IS NOT NULL";
oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
var password = oRs("prs_perslid_authenticatie").Value;
var mobiel = oRs("prs_perslid_mobiel").Value;
var puo_result = putorders.sendSMS(mobiel, L("lcl_vis_log_psw")+ " " + password);
__Log ("SMS bericht verzonden naar: " + mobiel);
}
%>
</head>
<body>
<p>Hier geen indicatie of de gebruikersnaam al dan niet bestaat.</p>
</body>
</html>
<% ASPPAGE_END(); %>

View File

@@ -1918,6 +1918,7 @@
voorraad_srtdeel: function _voorraad_srtdeel(pautfunction, params)
{
// Valid and supported parameters are:
// params.catalogus_type: key
// params.catalogus_key : key
// params.besgroep_key :
// params.item_key :
@@ -1988,6 +1989,9 @@
+ " AND g.ins_discipline_key = bd.ins_discipline_key"
+ " AND bd.ins_discipline_key = dp.bes_ins_discipline_key"
+ " AND sd.bes_srtdeel_verwijder IS NULL"
+ (params.catalogus_type
? " AND dp.bes_disc_params_bestelmode = " + params.catalogus_type
: "")
+ (params.catalogus_key
? " AND dp.bes_ins_discipline_key_inkoop = " + params.catalogus_key
+ " AND (sd.bes_srtdeel_vervaldatum IS NULL OR sd.bes_srtdeel_vervaldatum > SYSDATE)"
@@ -2071,6 +2075,9 @@
+ " AND g.ins_discipline_key = bd.ins_discipline_key"
+ " AND bd.ins_discipline_key = dp.bes_ins_discipline_key"
+ " AND sd.bes_srtdeel_verwijder IS NULL"
+ (params.catalogus_type
? " AND dp.bes_disc_params_bestelmode = " + params.catalogus_type
: "")
+ (params.catalogus_key
? " AND dp.bes_ins_discipline_key_inkoop = " + params.catalogus_key
+ " AND (sd.bes_srtdeel_vervaldatum IS NULL OR sd.bes_srtdeel_vervaldatum > SYSDATE)"
@@ -2187,6 +2194,9 @@
+ " AND bd1.ins_discipline_key = dp1.bes_ins_discipline_key"
+ " AND sd1.bes_srtdeel_nr = sd.bes_srtdeel_nr" // Dezelfde omschrijving.
+ " AND dp1.bes_ins_discipline_key_inkoop = bd.ins_discipline_key)" // Gekoppeld aan inkoopcatalogus.
+ (params.catalogus_type
? " AND dp.bes_disc_params_bestelmode = " + params.catalogus_type
: "")
+ (params.catalogus_key
? " AND bd.ins_discipline_key = " + params.catalogus_key
+ " AND (sd.bes_srtdeel_vervaldatum IS NULL OR sd.bes_srtdeel_vervaldatum > SYSDATE)"
@@ -2283,6 +2293,9 @@
+ " AND bd1.ins_discipline_key = dp1.bes_ins_discipline_key"
+ " AND sd1.bes_srtdeel_nr = sd.bes_srtdeel_nr" // Dezelfde omschrijving.
+ " AND dp1.bes_ins_discipline_key_inkoop = bd.ins_discipline_key)" // Gekoppeld aan inkoopcatalogus.
+ (params.catalogus_type
? " AND dp.bes_disc_params_bestelmode = " + params.catalogus_type
: "")
+ (params.catalogus_key
? " AND bd.ins_discipline_key = " + params.catalogus_key
+ " AND (sd.bes_srtdeel_vervaldatum IS NULL OR sd.bes_srtdeel_vervaldatum > SYSDATE)"
@@ -2377,6 +2390,9 @@
+ " AND bd1.ins_discipline_key = dp1.bes_ins_discipline_key"
+ " AND sd1.bes_srtdeel_nr = sd.bes_srtdeel_nr" // Dezelfde omschrijving.
+ " AND dp1.bes_ins_discipline_key_inkoop = bd.ins_discipline_key)" // Gekoppeld aan inkoopcatalogus.
+ (params.catalogus_type
? " AND dp.bes_disc_params_bestelmode = " + params.catalogus_type
: "")
+ (params.catalogus_key
? " AND bd.ins_discipline_key = " + params.catalogus_key
+ " AND (sd.bes_srtdeel_vervaldatum IS NULL OR sd.bes_srtdeel_vervaldatum > SYSDATE)"

View File

@@ -147,7 +147,7 @@ transitParam = buildTransitParam(["punch", "voorraad", "mld_key", "artikel_key",
%>
<script type="text/javascript" >
var disc_url = "../bes/bes_select_discipline.asp" + ("<%=correctie%>" == "1" ? "?intern=1" : "");
FcltMgr.openModalDetail(disc_url, "<%=L("lcl_bes_fac_select_cat")%>",
FcltMgr.openModalDetail(disc_url, L("lcl_bes_fac_select_cat"),
{ nomessage: true,
callback: function (data)
{

View File

@@ -542,7 +542,7 @@ oRs.Close();
return false;
url = "../bes/sel_favourites.asp?disc_key=<%=bes_bestelling.dis_key%>";
FcltMgr.openModalDetail(url, "<%=L("lcl_bes_favour_title")%>",
FcltMgr.openModalDetail(url, L("lcl_bes_favour_title"),
{
callback: async function (data)
{
@@ -599,7 +599,7 @@ oRs.Close();
url = "../bes/addFavourites.asp" + "?srtdeel_key=" + bes_item_info.srtdeel_key
+ "&disc_key=<%=bes_bestelling.dis_key%>";
FcltMgr.openModalDetail(url, '<%=L("lcl_bes_favour_list")%>');
FcltMgr.openModalDetail(url, L("lcl_bes_favour_list"));
}
</script>
@@ -723,6 +723,7 @@ oRs.Close();
"sgAccount",
bes_bestelling.perslid_key != -1? bes_bestelling.perslid_key : user_key,
{ kostenplaatsKey: bes_bestelling.kostenplaats_key,
checkInit: bes_key == -1,
label: L("lcl_account"),
filtercode: "AA", // Alleen actieve kostenplaatsen kunnen selecteren "All Active". Huidige waarde als initi<74>le waarde kan bij kostenplaatsen altijd.
urlAdd: [{ urlParam: "prs_key", field: (frontend && bes_disc_info.disc_params_for_others && S("prs_dep_default_kpn_voor") == 1? "personFor" : "person") }],
@@ -1027,7 +1028,7 @@ oRs.Close();
</td>
<td class="besdetailtd">
<table class="besdetailtable">
<tr><td colspan="2" class="iteminfo2" title="<%= L("lcl_bes_srtgroup") %>" id="srtgroep_text"></td></tr>
<tr><td colspan="2" class="iteminfo2" title="<%=L("lcl_bes_srtgroup")%>" id="srtgroep_text"></td></tr>
<tr><td colspan="2" class="iteminfo1" title="<%=L("lcl_bes_srtdeel_full")%>" id="srtdeel_omschrijving"></td></tr>
<tr id="opmerking_tr" style="display:none">

View File

@@ -250,7 +250,7 @@ user.auth_required_or_abort(this_bes.canRetourBES);
}
%>
<script type="text/javascript">
FcltMgr.closeDetail(window, {success: true, warning: "<%=L("lcl_bes_registered_nr") + " " + new_bes_key%>"});
FcltMgr.closeDetail(window, {success: true, warning: L("lcl_bes_registered_nr") + " <%=new_bes_key%>"});
</script>
<%
Response.End;

View File

@@ -47,12 +47,13 @@ function updateDisc(pautfunction, pdisc, psrtgroup, psrtdeel)
$("#instock").closest("tr").show();
}
var ldisctype = $('#disctype :selected').val();
var ldisctype = $('#disctype :selected').val() || -1;
$("#disc").load("../Shared/loadBESDisc.asp?" + serializeObj(
{ autfunction: pautfunction,
disctype: ldisctype,
module: "bes",
emptyOption: "",
selectjustone: 1,
disc_key_arr: (pdisc? pdisc : []) }),
function ()
{ // Selecteer eventueel de initi<74>le items die meegegeven kunnen worden
@@ -68,6 +69,7 @@ function updateSrtGroup(pautfunction, psrtgroup, psrtdeel)
disc_key_arr: ldis_key,
module: "bes",
emptyOption: "",
selectjustone: 1,
srtgroup: (psrtgroup? psrtgroup : []) }),
function ()
{ // Selecteer eventueel de initi<74>le items die meegegeven kunnen worden
@@ -84,6 +86,7 @@ function updateSrtDeel(pautfunction, psrtdeel)
srtgroup_key_arr: lsrtgroup,
module: "bes",
emptyOption: "",
selectjustone: 1,
srtdeel: (psrtdeel? psrtdeel : []),
verwijderd: (maninfo ? 1 : ""),
datefrom: (maninfo ? $('#date_from').val() : "")

View File

@@ -150,6 +150,8 @@ user.auth_required_or_abort(this_bestelopdr.canReadAny || this_bestelling.isVera
buttons.push({ icon: "fa-envelope", title: L("lcl_noti_bes_opdr_email"), action: 'bes_opdr_mail()' });
IFRAMER_HEADER(L("lcl_bes_opdrframe_algemeen"), buttons)
shared.notificatie_fail_BLOCK(opdr_key, 'bestelopdr');
%>
<form action="order_details.asp" method="post" name="u2" >
<%

View File

@@ -25,6 +25,7 @@ function bes_voorraad_list (pautfunction, params)
// params.urole : the usuals two-letter lowercase string
// params.outputmode : print to 0 = screen, 1 = printer, 2 = excel, etc.
// params.showall : boolean (true | false)
// params.catalogus_type: key
// params.catalogus_key : key
// params.besgroep_key :
// params.item_key :
@@ -212,8 +213,8 @@ function bes_voorraad_list (pautfunction, params)
rst.addColumn(new Column({caption: "Uit-maar nog in magazijn", content: "aantal_uitmaarnoginmagazijn", datatype: "number", total: true}));
rst.addColumn(new Column({caption: L("lcl_bes_voorraad"), content: "voorraad", datatype: "number", total: true}));
rst.addColumn(new Column({caption: L("lcl_bes_unity"), content: "eenheid_extern"}));
rst.addColumn(new Column({caption: L("lcl_bes_voorraadmin"), content: "voorraadmin"}));
rst.addColumn(new Column({caption: L("lcl_bes_voorraadmax"), content: "voorraadmax"}));
rst.addColumn(new Column({caption: L("lcl_bes_voorraadmin"), content: "voorraadmin", datatype: "number"}));
rst.addColumn(new Column({caption: L("lcl_bes_voorraadmax"), content: "voorraadmax", datatype: "number"}));
rst.addColumn(new Column({caption: L("lcl_bes_lopend"), content: "aantal_open_order", datatype: "number", total: true}));
rst.addColumn(new Column({caption: L("lcl_bes_bestellen"), content: fncolTeBestellen, datatype: "number", total: true}));
}
@@ -245,4 +246,3 @@ function bes_voorraad_list (pautfunction, params)
<%
}
%>

View File

@@ -78,6 +78,16 @@ var authparams = user.checkAutorisation(autfunction);
<input type="hidden" name="urole" value="<%=urole%>">
<% // <!-- Catalogus type -->
var sql = "SELECT SUM(CASE"
+ " WHEN dp.bes_disc_params_bestelmode = 0"
+ " THEN 1"
+ " ELSE 0"
+ " END) aantal_uitcat"
+ " , SUM(CASE"
+ " WHEN dp.bes_disc_params_bestelmode = 1"
+ " THEN 1"
+ " ELSE 0"
+ " END) aantal_vrij"
+ " , SUM(CASE"
+ " WHEN dp.bes_disc_params_bestelmode = 2"
+ " THEN 1"
+ " ELSE 0"
@@ -89,12 +99,28 @@ var authparams = user.checkAutorisation(autfunction);
+ " END) aantal_actueel"
+ " FROM bes_discipline bd"
+ " , bes_disc_params dp"
+ " WHERE bd.ins_discipline_key = dp.bes_ins_discipline_key";
+ " WHERE bd.ins_discipline_key = dp.bes_ins_discipline_key"
+ " AND bd.ins_discipline_verwijder IS NULL"
+ " AND bd.ins_discipline_key IN (SELECT dp.bes_ins_discipline_key_inkoop"
+ " FROM bes_disc_params dp"
+ " WHERE dp.bes_ins_discipline_key_inkoop IS NOT NULL)"
+ " AND ins_discipline_key IN (SELECT ins_discipline_key"
+ " FROM fac_v_webgebruiker g"
+ " , fac_functie f"
+ " WHERE g.prs_perslid_key = " + user_key
+ " AND f.fac_functie_key = g.fac_functie_key "
+ " AND f.fac_functie_code = " + safe.quoted_sql(autfunction) + ")";
var oRs = Oracle.Execute(sql);
var aantal_bestel = oRs("aantal_bestel").Value;
var aantal_actueel = oRs("aantal_actueel").Value;
var aantal_uitcat = oRs("aantal_uitcat").Value; // Uit catalogus(0).
var aantal_vrij = oRs("aantal_vrij").Value; // Vrij aanmaken(1).
var aantal_bestel = oRs("aantal_bestel").Value; // Bestellijst(2).
var aantal_actueel = oRs("aantal_actueel").Value; // Actuele lijst(3).
oRs.Close();
var sql_arr = [];
if (aantal_uitcat > 0)
sql_arr.push("SELECT 0, " + safe.quoted_sql(L("lcl_bes_fromcatalog")) + " FROM DUAL");
if (aantal_vrij > 0)
sql_arr.push("SELECT 1, " + safe.quoted_sql(L("lcl_bes_createfreely")) + " FROM DUAL");
if (aantal_bestel > 0)
sql_arr.push("SELECT 2, " + safe.quoted_sql(L("lcl_bes_orderlist")) + " FROM DUAL");
if (aantal_actueel > 0)
@@ -107,6 +133,7 @@ var authparams = user.checkAutorisation(autfunction);
onChange: 'updateDisc("' + autfunction + '");', // discChanged
trclass: "primsearch",
emptyOption: "",
selectjustone: true, // required zorgt er eigenlijk ook al voor dat als er maar 1 waarde is, dat deze wordt geselecteerd.
required: true
});
@@ -131,7 +158,8 @@ var authparams = user.checkAutorisation(autfunction);
label: L("lcl_bes_Catalogus"),
onChange: 'updateSrtGroup("' + autfunction + '");', // discChanged
trclass:"primsearch",
emptyOption: ""
emptyOption: "",
selectjustone: true
});
%>
@@ -142,7 +170,8 @@ var authparams = user.checkAutorisation(autfunction);
label: L("lcl_bes_srtgroup"),
onChange: 'updateSrtDeel("' + autfunction + '");', // srtgroupChanged
trclass: "secsearch",
emptyOption: ""
emptyOption: "",
selectjustone: true
}); %>
<!-- Item select box -->
@@ -151,14 +180,15 @@ var authparams = user.checkAutorisation(autfunction);
{ initKey: srtdeel,
label: L("lcl_bes_srtdeel"),
trclass: "secsearch",
emptyOption: ""
emptyOption: "",
selectjustone: true
}); %>
<script type="text/javascript">
// Laad de groupen en de items
// Selecteer eventueel de initi<74>le groepen en items die meegegeven kunnen worden
$(function()
{
updateDisc("<%=autfunction%>", "<%=disc%>", "<%=srtgroup%>", "<%=srtdeel%>");
updateDisc("<%=autfunction%>", "<%=disc%>", "<%=srtgroup%>", "<%=srtdeel%>");
});
</script>
<% SEARCH_BLOCK_END();

View File

@@ -70,6 +70,7 @@ else
{ urole : urole,
outputmode: outputmode,
showall: showall,
catalogus_type: (disctype != -1? disctype : null),
catalogus_key: (disc != -1? disc : null),
besgroep_key: (besgroep_key != -1? besgroep_key : null),
item_key: (item_key != -1? item_key : null),

View File

@@ -17,7 +17,8 @@ bez =
// t.prs_afdeling_key (nog) niet
var sql_terr = "SELECT alg_terreinsector_key"
+ " FROM alg_v_aanwezigterreinsector t WHERE 1=1";
+ " FROM alg_v_aanwezigterreinsector t"
+ " WHERE (t.alg_terreinsector_vervaldatum IS NULL OR t.alg_terreinsector_vervaldatum > TRUNC(SYSDATE))";
var pafparams = user.checkAutorisation("WEB_BEZPAF", true);
var autlevel = 9;
if (pafparams)

View File

@@ -70,11 +70,11 @@ function bez_edit_bezoekers(afspraak_key, afspraak_begin, afspraak_eind, loc_key
{ %>
<th><!--contact--></th>
<% } %>
<th><%=L("lcl_vis_name")%></th>
<th><%=L("lcl_vis_company")%><%=S("bez_sel_internpersoon") == 1? "/" + L("lcl_department") : ""%></th>
<th><%=safe.html(L("lcl_vis_name"))%></th>
<th><%=safe.html(L("lcl_vis_company"))%><%=S("bez_sel_internpersoon") == 1? "/" + safe.html(L("lcl_department")) : ""%></th>
<% if (S("vis_remark") == 1 || S("vis_remark") == 2)
{ %>
<th><%=L("lcl_vis_remark")%></th>
<th><%=safe.html(L("lcl_vis_remark"))%></th>
<% } %>
<th>
<% if (S("vis_parking_key") != -1 && this_bez_bez.canWritePrk)
@@ -184,7 +184,7 @@ function bez_edit_bezoekers(afspraak_key, afspraak_begin, afspraak_eind, loc_key
<td align="center">
<% if (oRs("bez_bezoekers_done").Value == null)
{ %>
<span onclick="deleteVisit(<%=next_vis%>)" title="<%=L("lcl_delete")%>"><%=I("fa-trash-alt")%></span>
<span onclick="deleteVisit(<%=next_vis%>)" title="<%=safe.htmlattr(L("lcl_delete"))%>"><%=I("fa-trash-alt")%></span>
<%
} else {
anydone = true;

View File

@@ -235,6 +235,7 @@ function bez_list(pautfunction, params)
: " , a.bez_afspraak_datum bez_afspraak_datum"
+ " , a.bez_afspraak_eind bez_afspraak_eind")
+ " , " + S("prs_pers_string") + " pers_naam"
+ " , p.prs_perslid_email contact_email"
+ " , a.bez_afspraak_gastheer gastheer"
+ " , p2.prs_perslid_email gastheer_email"
+ " , COALESCE(a.bez_afspraak_telefoonnr, p2.prs_perslid_telefoonnr, p2.prs_perslid_mobiel) gastheer_telf_nr"
@@ -259,7 +260,7 @@ function bez_list(pautfunction, params)
+ " FROM (SELECT i.ins_deel_key"
+ " , i.ins_alg_ruimte_key"
+ " , i.ins_alg_ruimte_type"
+ " FROM ins_deel i"
+ " FROM ins_v_deelenonderdeel i"
+ " , ins_srtdeel s"
+ " WHERE s.ins_srtdeel_key = i.ins_srtdeel_key"
+ " AND i.ins_deel_verwijder IS NULL"
@@ -272,7 +273,7 @@ function bez_list(pautfunction, params)
+ " SELECT i.ins_deel_key"
+ " , i.ins_alg_ruimte_key"
+ " , i.ins_alg_ruimte_type"
+ " FROM ins_deel i"
+ " FROM ins_v_deelenonderdeel i"
+ " , ins_srtdeel s"
+ " WHERE s.ins_srtdeel_key = i.ins_srtdeel_key"
+ " AND i.ins_deel_verwijder IS NULL"
@@ -1132,17 +1133,19 @@ function bez_list(pautfunction, params)
var safe_content = "";
var chatHostMail = oRs("gastheer_email").Value;
var chatHostName = oRs("gastheer").Value || "";
var chatContactMail = oRs("contact_email").Value;
var chatContactName = oRs("pers_naam").Value || "";
var bez_naam = oRs("bez_afspraak_naam").Value || "";
var bez_bedrijf = oRs("bez_bedrijf").Value || "";
var locatie = oRs("loc_omschr").Value || "";
var defaultMessage = L("lcl_bezchat_message").format(bez_naam, bez_bedrijf, locatie).replace("()", "");
if (outputmode == 0 && oRs("authorized").Value == 1 && chatHostMail && ((oRs("bez_actie_flags").Value & 4)==4))
{
var chatUrl = S("bez_chat_message").format(chatHostMail, Server.URLencode(defaultMessage));
var chatUrl = S("bez_chat_message").format(chatHostMail, Server.URLencode(defaultMessage), chatContactMail);
safe_content = '<span id="chatIN' + oRs("bez_key").Value + '"'
+ ' class="ilbutton"'
+ ' OnClick="doLaunchChat(event, \'' + safe.jsstring(chatUrl) + '\');"'
+ ' title="' + safe.htmlattr(L("lcl_bezchat_launch").format(chatHostName)) + '"'
+ ' title="' + safe.htmlattr(L("lcl_bezchat_launch").format(chatHostName, chatContactName)) + '"'
+ '>' + I("fa-comment-exclamation") + '</span>';
safe_content = "<div id='chatlink" + oRs("bez_key").Value + "'"
+ (oRs("bez_bezoekers_done").value === null ? " class='hidden'" : "")

View File

@@ -96,6 +96,10 @@ switch (req_info)
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
+ " AND o.mld_uitvoerende_keys = b.prs_bedrijf_key"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND g.prs_kostensoortgrp_verwijder IS NULL"
+ " AND s.prs_kostensoort_verwijder IS NULL"
+ " AND b.prs_bedrijf_verwijder IS NULL"
+ (init_key != -1 ? " AND o.mld_opdr_key = " + init_key : "");
break;
}
@@ -123,6 +127,10 @@ switch (req_info)
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
+ " AND o.mld_uitvoerende_keys = b.prs_bedrijf_key"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND g.prs_kostensoortgrp_verwijder IS NULL"
+ " AND s.prs_kostensoort_verwijder IS NULL"
+ " AND b.prs_bedrijf_verwijder IS NULL"
+ (parent_key != -1 ? " AND p.bgt_project_key = " + parent_key : "") // Een bedrijf kan in meerdere disciplines/projecten gebruikt worden!
+ (init_key != -1 ? " AND b.prs_bedrijf_key = " + init_key : "");
break;
@@ -142,6 +150,7 @@ switch (req_info)
+ " , bgt_kostenrubriek r"
+ " WHERE d.bgt_ins_discipline_key = p.ins_discipline_key"
+ " AND p.bgt_project_key = r.bgt_project_key"
+ " AND p.bgt_project_verwijder IS NULL"
+ (init_key != -1 ? " AND r.bgt_kostenrubriek_key = " + init_key : "");
break;
}
@@ -162,6 +171,8 @@ switch (req_info)
+ " WHERE d.bgt_ins_discipline_key = p.ins_discipline_key"
+ " AND p.bgt_project_key = r.bgt_project_key"
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND g.prs_kostensoortgrp_verwijder IS NULL"
+ (init_key != -1 ? " AND g.prs_kostensoortgrp_key = " + init_key : "");
break;
}
@@ -184,6 +195,9 @@ switch (req_info)
+ " AND p.bgt_project_key = r.bgt_project_key"
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND g.prs_kostensoortgrp_verwijder IS NULL"
+ " AND s.prs_kostensoort_verwijder IS NULL"
+ (init_key != -1 ? " AND s.prs_kostensoort_key = " + init_key : "");
break;
}
@@ -210,6 +224,8 @@ switch (req_info)
+ " WHERE d.bgt_ins_discipline_key = p.ins_discipline_key"
+ " AND s.ins_discipline_key(+) = p.ins_discipline_key"
+ " AND s.prs_kostenplaats_verwijder IS NULL"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND s.prs_kostenplaats_verwijder IS NULL"
+ (parent_key != -1 ? " AND p.bgt_project_key = " + parent_key : "")
+ (init_key != -1 ? " AND (s.prs_kostenplaats_key = " + init_key + " OR p.prs_kostenplaats_key = " + init_key + ")" : "");
break;
@@ -352,6 +368,9 @@ switch (req_info)
+ " WHERE p.bgt_project_key = r.bgt_project_key"
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND s.prs_kostensoort_verwijder IS NULL"
+ " AND g.prs_kostensoortgrp_verwijder IS NULL"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND s.prs_kostensoortgrp_key = " + parent_key
+ ( sel_mode == "budget_edit"
? " AND NOT EXISTS (SELECT '' FROM bgt_budget b WHERE b.prs_kostensoort_key = s.prs_kostensoort_key)"
@@ -374,7 +393,10 @@ switch (req_info)
+ " , ins_tab_discipline d"
+ " , bgt_project p"
+ " WHERE p.ins_discipline_key = d.ins_discipline_key"
+ " AND k.ins_discipline_key = d.ins_discipline_key"
+ " AND kp.ins_discipline_key = d.ins_discipline_key"
+ " AND kp.prs_kostenplaats_verwijder IS NULL"
+ " AND d.ins_discipline_verwijder IS NULL"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND p.bgt_project_key = " + parent_key;
break;
}
@@ -406,6 +428,7 @@ switch (req_info)
+ " , fin_btwtabel fa"
+ " WHERE ba.fin_btwtabel_key = fa.fin_btwtabel_key(+)"
+ " AND ba.prs_bedrijf_verwijder IS NULL"
+ " AND fa.fin_btwtabel_verwijder IS NULL"
+ " AND fa.fin_btwtabel_default IS NULL"
+ ((child_key > 0 || sel_mode == "order_new") ? "" : " AND ba.prs_bedrijf_key = -1")
+ " )";
@@ -433,6 +456,9 @@ switch (req_info)
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
+ " AND o.mld_uitvoerende_keys = b.prs_bedrijf_key"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND g.prs_kostensoortgrp_verwijder IS NULL"
+ " AND s.prs_kostensoort_verwijder IS NULL"
+ " AND b.prs_bedrijf_verwijder IS NULL"
+ (parent_key > 0 ? " AND p.ins_discipline_key = " + parent_key : "")
+ (child_key > 0 ? " AND p.bgt_project_key = " + child_key : "");
@@ -448,6 +474,7 @@ switch (req_info)
+ " , (SELECT f1.fin_btwtabelwaarde_perc"
+ " FROM fin_btwtabelwaarde f1"
+ " WHERE f1.fin_btwtabelwaarde_key = s.fin_btwtabelwaarde_key"
+ " AND f1.fin_btwtabelwaarde_verwijder IS NULL"
+ ") kostensoort_btw_val"
+ " ,(SELECT COALESCE(w.fin_btwtabelwaarde_perc,0)"
+ " FROM prs_bedrijf b"
@@ -458,6 +485,8 @@ switch (req_info)
+ " AND w.fin_btwtabelwaarde_verwijder IS NULL"
+ " AND b.prs_bedrijf_key = o.mld_uitvoerende_keys"
+ " AND f.fin_btwtabel_default IS NULL"
+ " AND f.fin_btwtabel_verwijder IS NULL"
+ " AND b.prs_bedrijf_verwijder IS NULL"
+ " ) bedrijf_btw_val"
+ " , (SELECT COUNT(*)"
+ " FROM prs_bedrijf b"
@@ -465,6 +494,8 @@ switch (req_info)
+ " WHERE b.fin_btwtabel_key = f.fin_btwtabel_key"
+ " AND b.prs_bedrijf_key = o.mld_uitvoerende_keys"
+ " AND f.fin_btwtabel_default IS NULL"
+ " AND f.fin_btwtabel_verwijder IS NULL"
+ " AND b.prs_bedrijf_verwijder IS NULL"
+ ") btw_off"
+ " , s.prs_kostensoortgrp_key grp_key"
+ " , o.prs_kostensoort_key srt_key"
@@ -481,6 +512,9 @@ switch (req_info)
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND g.prs_kostensoortgrp_verwijder IS NULL"
+ " AND s.prs_kostensoort_verwijder IS NULL"
+ (child_key > 0 ? " AND o.mld_uitvoerende_keys = " + child_key : "")
+ (parent_key > 0 ? " AND p.bgt_project_key = " + parent_key : "");
sql = "SELECT sel_key"
@@ -540,6 +574,8 @@ switch (req_info)
+ " AND d.ins_discipline_key = kp.ins_discipline_key"
+ " AND kp.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key(+)"
+ " AND kp.prs_kostenplaats_verwijder IS NULL"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND ins_discipline_verwijder IS NULL"
+ " AND p.bgt_project_key = " + parent_key;
break;
}
@@ -604,6 +640,7 @@ switch (req_info)
+ " FROM bgt_kostenrubriek r"
+ " , bgt_project p"
+ " WHERE p.bgt_project_key = r.bgt_project_key"
+ " AND p.bgt_project_verwijder IS NULL"
+ " AND p.ins_discipline_key = " + parent_key;
break;
case "P": rubrieksql = "SELECT bgt_kostenrubriek_key"
@@ -623,7 +660,7 @@ switch (req_info)
break;
case "": rubrieksql = "SELECT p.bgt_project_key"
+ " FROM bgt_budget p"
+ " WHERE bgt_budget_key = " + parent_key;
+ " WHERE p.bgt_budget_key = " + parent_key;
}
sql = "SELECT b.bgt_budget_key"
@@ -697,6 +734,8 @@ switch (req_info)
+ " , fin_btwtabelwaarde f"
+ " WHERE s.fin_btwtabelwaarde_key = f.fin_btwtabelwaarde_key"
+ " AND o.prs_kostensoort_key = s.prs_kostensoort_key"
+ " AND s.prs_kostensoort_verwijder IS NULL"
+ " AND f.fin_btwtabelwaarde_verwijder IS NULL"
+ " AND o.mld_opdr_key = " + parent_key;
var oRs = Oracle.Execute(sql);
result.inclbtw = (oRs("prs_kostensoort_btw").Value == 1);
@@ -714,6 +753,9 @@ switch (req_info)
+ " WHERE o.prs_kostensoort_key = s.prs_kostensoort_key"
+ " AND s.fin_btwtabelwaarde_key = f.fin_btwtabelwaarde_key(+)"
+ " AND o.mld_uitvoerende_keys = b.prs_bedrijf_key"
+ " AND s.prs_kostensoort_verwijder IS NULL"
+ " AND f.fin_btwtabelwaarde_verwijder IS NULL"
+ " AND b.prs_bedrijf_verwijder IS NULL"
+ " AND s.prs_kostensoortgrp_key = " + parent_key
+ " ORDER BY 2";
var new_lov = [];

View File

@@ -322,7 +322,7 @@ function buildSymbols(cHandle, symbolProps)
// Zoniet markeer hem dan met een *STAR er achter
var rnr = cHandle.FindInContour(oRs("dwgX").Value, oRs("dwgY").Value);
// Let op: Sinds 5.3.2 zit R:12345 in de dwf-contour-key
if (!rnr || !rnr.match(/^R:/) || rnr.substr(2) != oRs("cadkey").Value)
if ((!rnr || !rnr.match(/^R:/) || rnr.substr(2) != oRs("cadkey").Value) && user.has(["WEB_CADBOF", "WEB_CADFOF"]))
{
var symbol = cHandle.AddSymbol(oRs("dwgX").Value+scl*S("fg_dobbelDist")/2, oRs("dwgY").Value+scl*S("fg_dobbelDist")/2,"*STAR");
symbol.Scale = scl*0.25;

View File

@@ -109,6 +109,20 @@ if (geb_key == -1 && floor_key != -1) {
geb_key = oRs("alg_gebouw_key").value;
oRs.Close();
}
var multi_tz = Session("time_zone") != S("fac_server_timezone"); // Hebben we te maken met een gebouw, gebruiker of server in een afwijkende tijdszone?
if (!multi_tz) {
var sql = "SELECT l.alg_locatie_timezone"
+ " FROM alg_locatie l, alg_gebouw g"
+ " WHERE g.alg_gebouw_key = " + geb_key
+ " AND g.alg_locatie_key = l.alg_locatie_key";
var oRs = Oracle.Execute(sql);
var alg_tz = !oRs.EOF && oRs("alg_locatie_timezone").Value
|| S("fac_server_timezone");
oRs.Close();
multi_tz = alg_tz != Session("time_zone");
}
var hidenav = getQParamInt("hidenav", 0); // optie: toon geen floornavigator
var fac_usrrap_key = getQParamInt("fac_usrrap_key", S("fg_infobordreport_key")); // In de core is een default usrrap (res_v_rap_infobordframe) met key <12> gedefinieerd
@@ -236,7 +250,7 @@ if (fac_usrrap_key > -1)
} );
}
else
MMap.Refresh();
MMap.Refresh(false, true); // geen autozoom
}
@@ -404,7 +418,7 @@ var /*global*/ resizeTimerID=null;
Response.Write("<h2 class='floorscreen'>" + safe.html(oRs("alg_gebouw_naam").value) + "</h2>");
if (datumfilter)
{
Response.Write("<h2 class='infodatumfilter'>" + toDateString(datumfilter, false, true) + "</h2>");
Response.Write("<h2 class='infodatumfilter'>" + toDateString(datumfilter, { pretty: !multi_tz }) + "</h2>");
if (showmode == 0)
{
Response.Write("<button onclick='to2D()'>2D</button'><button onclick='to3D()'>3D</button>");
@@ -425,7 +439,7 @@ if (thema_key > 0)
if (disc_key > 0)
{
var sqlMaxKleur = "SELECT ar.alg_verdieping_key, MAX(thema.waarde) waarde, ti.cad_legendawaarde_rgb, count(*) aantal "
+ " FROM ins_deel id, "
+ " FROM ins_v_deelenonderdeel id, "
+ " ins_srtdeel isd, "
+ " alg_ruimte ar, "
+ " ( "+ thema_view + ") THEMA, "

View File

@@ -36,7 +36,7 @@ if (inoutMode == MODE_IN && scenario_key > 0)
}
else if (inoutMode == MODE_IN)
{
deelTable = "ins_deel";
deelTable = "ins_v_deelenonderdeel";
deelParent = "ins_alg_ruimte_key";
dbTable = "alg_ruimte";
dbLabel = "alg_ruimte_nr";
@@ -46,7 +46,7 @@ else if (inoutMode == MODE_IN)
}
else
{
deelTable = "ins_deel";
deelTable = "ins_v_deelenonderdeel";
deelParent = "ins_alg_ruimte_key";
dbTable = "alg_terreinsector";
dbLabel = "alg_terreinsector_code";

View File

@@ -261,7 +261,7 @@ function addObjecten(cHandle, highlight_ins_deel_key)
// Dat aantal moeten we van te voren weten om linksboven de dobbel te
// kunnen beginnen
sql = "SELECT ins_alg_ruimte_key alg_ruimte_key, count(*) aantal"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, " + dbTable + " SYNC"
+ " FROM ins_v_deelenonderdeel id, ins_srtdeel isd, ins_srtgroep isg, " + dbTable + " SYNC"
+ " WHERE id.ins_alg_ruimte_key = SYNC." + colKey
// + " AND id.ins_alg_ruimte_type = 'R'"
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
@@ -296,7 +296,7 @@ function addObjecten(cHandle, highlight_ins_deel_key)
sql : "SELECT 'I:'||ins_deel_key key, ins_deel_omschrijving oms,"
+ " ins_srtdeel_acadsymbol symbolname, ins_disc_params_type,"
+ " ins_srtdeel_acadsymbol_dwgx orgx, ins_srtdeel_acadsymbol_dwgy orgy, di.ins_discipline_color color"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg,"
+ " FROM ins_v_deelenonderdeel id, ins_srtdeel isd, ins_srtgroep isg,"
+ " ins_disc_params isdp, ins_tab_discipline di"
+ " WHERE id.ins_alg_ruimte_key = " + oRsRuimte("alg_ruimte_key").Value
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
@@ -335,7 +335,7 @@ function addObjecten(cHandle, highlight_ins_deel_key)
+ " ins_srtdeel_acadsymbol_dwgx orgx, ins_srtdeel_acadsymbol_dwgy orgy,"
+ " ins_srtdeel_acadlabelpos lpos, ins_srtdeel_acadlabelsize lsize,"
+ " id.ins_alg_ruimte_key cadkey, ins_disc_params_type, di.ins_discipline_color color"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, "+dbTable+" SYNC,"
+ " FROM ins_v_deelenonderdeel id, ins_srtdeel isd, ins_srtgroep isg, "+dbTable+" SYNC,"
+ " ins_disc_params isdp, ins_tab_discipline di"
+ " WHERE id.ins_alg_ruimte_key = SYNC."+colKey
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
@@ -383,7 +383,7 @@ function addObjecten(cHandle, highlight_ins_deel_key)
fnSql: function (viewName)
{
return "SELECT 'I:'||id.ins_deel_key key, thema.*"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, "+dbTable+" SYNC, " + viewName + " THEMA"
+ " FROM ins_v_deelenonderdeel id, ins_srtdeel isd, ins_srtgroep isg, "+dbTable+" SYNC, " + viewName + " THEMA"
+ " WHERE id.ins_alg_ruimte_key = SYNC."+colKey
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND "+syncParent+" = " + pvKey
@@ -441,7 +441,7 @@ function addWerkplekObjecten(cHandle)
+ " isd.ins_srtdeel_key, ins_srtdeel_acadsymbol, " + dbLabel + " dblabel,"
+ " ins_srtdeel_acadsymbol_dwgx orgx, ins_srtdeel_acadsymbol_dwgy orgy,"
+ " '#000000' color" //zwart?
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, alg_ruimte ar,"
+ " FROM ins_v_deelenonderdeel id, ins_srtdeel isd, ins_srtgroep isg, alg_ruimte ar,"
+ " prs_werkplek pw"
+ " WHERE pw.prs_alg_ruimte_key = ar.alg_ruimte_key"
+ " AND id.ins_alg_ruimte_key = pw.prs_werkplek_key"
@@ -503,7 +503,7 @@ function addWerkplekObjecten(cHandle)
fnSql: function (viewName)
{
return "SELECT 'IW:'||id.ins_deel_key key, waarde"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, "
+ " FROM ins_v_deelenonderdeel id, ins_srtdeel isd, ins_srtgroep isg, "
+ " alg_ruimte SYNC, " + viewName + " THEMA,"
+ " prs_werkplek pw"
+ " WHERE pw.prs_alg_ruimte_key = SYNC.alg_ruimte_key"

View File

@@ -264,7 +264,7 @@ var datumfilter = getQParamDate("datumfilter", null);
+ " , o.alg_verdieping_omschrijving"
+ " , o.alg_ruimte_key"
+ " , l.alg_district_key"
+ " FROM ins_deel g, alg_ruimte ar,"
+ " FROM ins_v_deelenonderdeel g, alg_ruimte ar,"
+ " ins_v_alg_overzicht o,"
+ " ins_srtdeel s, alg_locatie l, alg_district di " // I added this for alg_district_key (FSN#1082)
+ " WHERE g.ins_deel_verwijder IS NULL"

View File

@@ -1296,7 +1296,7 @@ if (scenario_key != 0)
{id:"", alt:"", label: L("lcl_slnk_properties"), onClick: "parent.showSymbol()", icon: "fa-info-square", button: 0, menu: 1 }
];
%>
<body>
<body id="searchbody">
<div id="dragSymbol" class="fgdragsymbol" style="display:none;position:absolute;z-index:1;">Hier komt dragsymbool</div>
<div id="datumfilter" class="fgdatumfilter" style="display:none;position:absolute;z-index:1;left:240px;top:1px"><select onchange='myRefresh()'></select></div>
<div id="PickcontextMenu" class="slnkmenu" style="display:none">
@@ -1749,7 +1749,7 @@ if (scenario_key != 0)
%>
</table>
</div>
<div id="fgmenutoggler" class='toggler' onClick="toggleLayout(this)" title='<%=L("lcl_toggler")%>'>
<div id="fgmenutoggler" class='toggler' onClick="toggleLayout(this)" title='<%=safe.htmlattr(L("lcl_toggler"))%>'>
</div>
@@ -1794,7 +1794,7 @@ if (scenario_key != 0)
</iframe>
<% } %>
</div>
<div id="fgtabtoggler" class='toggler' onClick="toggleTabLayout(this)" title='<%=L("lcl_toggler")%>'><%=I("fa-caret-down", { fastyle: "fas" })%></div>
<div id="fgtabtoggler" class='toggler' onClick="toggleTabLayout(this)" title='<%=safe.htmlattr(L("lcl_toggler"))%>'><%=I("fa-caret-down", { fastyle: "fas" })%></div>
<%
if (scenario_key > 0)

View File

@@ -595,8 +595,8 @@ function myIMGProcessor(IMGHandle)
// Vertaal dat zo mogelijk naar alg_ruimte_key dan wel ins_deel_key
function myFindKeys(SlnkEvent)
{
if (SlnkEvent.TextLabel != "" && SlnkEvent.TextLayer == "SLNK Labels")
{ // Precies op ruimte label geklikt negeren we
if (SlnkEvent.TextLabel != "" && (SlnkEvent.TextLayer == "SLNK Labels" || SlnkEvent.TextLayer == "SLNK Symbols"))
{ // Precies op ruimte of object label geklikt negeren we
SlnkEvent.TextLabel = "";
SlnkEvent.TextLayer = "";
}

View File

@@ -256,7 +256,7 @@ var /*global*/ resizeTimerID=null;
if (disc_key > 0)
{
var sqlMaxKleur = "SELECT ar.alg_verdieping_key, MAX(thema.waarde) waarde, ti.cad_legendawaarde_rgb, count(*) aantal "
+ " FROM ins_deel id, "
+ " FROM ins_v_deelenonderdeel id, "
+ " ins_srtdeel isd, "
+ " alg_ruimte ar, "
+ " ( "+ thema_view + ") THEMA, "

View File

@@ -129,14 +129,14 @@
// session ended due to inactivity
if (data.end == 1)
{
add2chat([{safe_message: "<%=L('lcl_chat_inactive_ended')%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", inactive: true, mine: false}]);
add2chat([{safe_message: L('lcl_chat_inactive_ended'), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), inactive: true, mine: false}]);
$("#chat, span.sendbutton").attr('readonly', true);
return false; // stop polling notify
}
// session aborted by user
else if (data.end == 2)
{
add2chat([{safe_message: "<%=L('lcl_chat_user_ended')%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", aborted: true, mine: false}]);
add2chat([{safe_message: L('lcl_chat_user_ended'), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), aborted: true, mine: false}]);
$("#chat, span.sendbutton").attr('readonly', true);
return false; // stop polling notify
}
@@ -152,18 +152,18 @@
ago15.setMinutes(ago15.getMinutes() - 15);
if (!ended && last_alive < ago15.getTime())
{
add2chat([{safe_message: "<%=L("lcl_chat_ended")%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", inactive: true, system: true, mine: false}]);
add2chat([{safe_message: L("lcl_chat_ended"), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), inactive: true, system: true, mine: false}]);
$("#chat, span.sendbutton").attr('readonly', true);
notify.end(chatSendchannelId, chatReadchannelId, 1); // session ended due to inactivity
ended = true;
return false;
} else if (!warning_2 && last_alive < ago14.getTime())
{
add2chat([{safe_message: "<%=L("lcl_chat_inactive_warning_2")%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", system: true, mine: false}]);
add2chat([{safe_message: L("lcl_chat_inactive_warning_2"), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), system: true, mine: false}]);
warning_2 = true;
} else if (!warning_1 && last_alive < ago10.getTime())
{
add2chat([{safe_message: "<%=L("lcl_chat_inactive_warning_1")%>", sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_system')%>", system: true, mine: false}]);
add2chat([{safe_message: L("lcl_chat_inactive_warning_1"), sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_system'), system: true, mine: false}]);
warning_1 = true;
}
}
@@ -194,7 +194,7 @@
fcltlinks: 1,
input: msg
}, function (json) {
add2chat([{ safe_message: json.fclthtml, sincetime: toTimeString(new Date(), true), fromname: "<%=L('lcl_chat_selfname')%>", mine: true }]);
add2chat([{ safe_message: json.fclthtml, sincetime: toTimeString(new Date(), true), fromname: L('lcl_chat_selfname'), mine: true }]);
chat_dosend(msg);
});
}

View File

@@ -114,7 +114,7 @@ Application.UnLock();
.data("wantid", wantId)
.data("prs_key", wanting.prs_key)
.data("prs_naam", wanting.naam)
.attr("title", "<%=L('lcl_chat_accept_action')%>")
.attr("title", "<%=safe.htmlattr(L('lcl_chat_accept_action'))%>")
.click(accept_chat);
html_queue.append(html_row);
}

View File

@@ -149,18 +149,18 @@ Application.UnLock();
{
if (init)
{
$("#chatmsg").text("<%=L("lcl_chat_initialmsg")%>");
$("#chatmsg").text(L("lcl_chat_initialmsg"));
$("span.spinnerbutton, span.cancelbutton").hide();
$("#initialmsg").autogrow().focus().on("keydown", handleEnter);
}
else
{
$("#chatmsg").text("<%=L("lcl_chat_waiting")%>");
$("#chatmsg").text(L("lcl_chat_waiting"));
}
}
else
{
$("#chatmsg").text("<%=L("lcl_chat_no_listeners")%>");
$("#chatmsg").text(L("lcl_chat_no_listeners"));
$("div.text-wrapper").hide();
}
FcltMgr.resized();
@@ -181,13 +181,13 @@ Application.UnLock();
<div class="chatinitialmsg" id="chatmsg"></div>
<div class="text-wrapper">
<textarea id="initialmsg" class="fldtxt" placeholder='<%=L("lcl_chat_initialmessage")%>'></textarea>
<span class="sendbutton" onclick="chat_ask()" title="<%=L("lcl_chat_waiting").format(wantchannelId)%>">
<span class="sendbutton" onclick="chat_ask()" title="<%=safe.htmlattr(L("lcl_chat_waiting")).format(wantchannelId)%>">
<%=I("fa-paper-plane fa-lg")%>
</span>
<span class="spinnerbutton" title="<%=L("lcl_chat_waiting").format(wantchannelId)%>">
<span class="spinnerbutton" title="<%=safe.htmlattr(L("lcl_chat_waiting")).format(wantchannelId)%>">
<%=I("fa-fclt-spinner fa-lg fas")%>
</span>
<span class="cancelbutton" onclick="chat_remove()" title="<%=L("lcl_chat_waiting").format(wantchannelId)%>">
<span class="cancelbutton" onclick="chat_remove()" title="<%=safe.htmlattr(L("lcl_chat_waiting")).format(wantchannelId)%>">
<%=I("fa-times fa-lg")%>
</span>
</div>

View File

@@ -127,15 +127,20 @@ cnt = { setcontractstatus:
// Tot welk bedrag is er al goedgekeurd.
var sql = "SELECT cnt_contract_approved"
+ " , cnt_contract_kosten"
+ " , dp.cnt_disc_params_approve_new"
+ " FROM cnt_contract c"
+ " WHERE cnt_contract_key = " + cnt_key;
+ " , cnt_disc_params dp"
+ " WHERE cnt_contract_key = " + cnt_key
+ " AND c.ins_discipline_key = dp.cnt_ins_discipline_key";
var oRs = Oracle.Execute(sql);
var kosten = oRs("cnt_contract_kosten").Value? oRs("cnt_contract_kosten").Value : 0;
var approved = oRs("cnt_contract_approved").Value? oRs("cnt_contract_approved").Value : -1;
var nieuwAltijdAccorderen = (oRs("cnt_disc_params_approve_new").Value == 1);
oRs.Close();
var functie_code;
if (kosten <= S("cnt_contract_limit1")) // Dit eerst testen i.v.m. Ter goedkeuring. Verder moet sowieso goedgekeurd worden.
if (!kosten && nieuwAltijdAccorderen)
functie_code = "WEB_CNTGO1";
else if (kosten <= S("cnt_contract_limit1")) // Dit eerst testen i.v.m. Ter goedkeuring. Verder moet sowieso goedgekeurd worden.
return []; // Het bedrag is lager als de eerste limiet. Het contract hoeft niet goed gekeurd te worden, dus een lege fiatteurs array teruggeven.
else if ((S("cnt_approval_all") == 0 && approved <= S("cnt_contract_limit1")) || (S("cnt_approval_all") == 1 && kosten <= S("cnt_contract_limit2")))
functie_code = "WEB_CNTGO1";
@@ -1081,6 +1086,7 @@ cnt = { setcontractstatus:
+ " , dp.cnt_disc_params_huurder"
+ " , dp.cnt_disc_params_opties"
+ " , dp.cnt_disc_params_ksverplicht"
+ " , dp.cnt_disc_params_approve_new"
+ " , cc.cnt_contract_mantel_key"
+ " , mc.cnt_contract_nummer_intern mantelcontractnummer"
+ " , mc.cnt_contract_omschrijving mantelomschrijving"
@@ -1178,7 +1184,8 @@ cnt = { setcontractstatus:
nnScope: oRs("nnScope").Value,
isAbonnement: oRs("bes_disc_params_contract").Value == 1,
magAutomatischVerlengen: oRs("cnt_disc_params_opties").Value == 1,
openfinref: oRs("openfinref").Value > 0
openfinref: oRs("openfinref").Value > 0,
nieuwAltijdAccorderen: oRs("cnt_disc_params_approve_new").Value == 1
};
oRs.Close()
@@ -1248,7 +1255,8 @@ cnt = { setcontractstatus:
cresult.canGoedkeur1 = cresult.canWrite("WEB_CNTGO1") && // Heb ik de rechten om goed te keuren op dit niveau 1?
terGoedkeuring && // Moet het contract gekeurd worden (juiste status)
((S("cnt_approval_all") == 0 && cnt_info.kosten >= S("cnt_contract_limit1")) || // Zijn de kosten hoger als de limiet
((!cnt_info.kosten && cnt_info.nieuwAltijdAccorderen) || // Zonder kosten toch accorderen?
(S("cnt_approval_all") == 0 && cnt_info.kosten >= S("cnt_contract_limit1")) || // Zijn de kosten hoger als de limiet
(S("cnt_approval_all") == 1 && cnt_info.kosten <= S("cnt_contract_limit2"))) && // Zijn de kosten onder mijn limiet om volledig goed te keuren
cnt_info.approved <= S("cnt_contract_limit1"); // Welke goedkeur? 1, 2 of 3?
cresult.canGoedkeur2 = cresult.canWrite("WEB_CNTGO2") &&

View File

@@ -3,7 +3,7 @@
$Revision$
$Id$
File: CNT/cnt_show_contract.asp
File: CNT/cnt_contract.asp
Description: Functie bestaand contractrecord toont of nieuwe laat editen
Parameters: cnt_key Contract key
Context:
@@ -60,9 +60,16 @@ var pageTitle = L('lcl_contract');
var pageIcon = "fa-file-certificate"; // default
if (cnt_key > 0)
{
sql = "SELECT cnt_contract_nummer_intern, cnt_contract_versie, cnt_disc_params_factuurschema, cnt_contract_omschrijving, cs.ins_discipline_image"
sql = "SELECT cnt_contract_nummer_intern"
+ " , cnt_contract_versie"
+ " , cnt_disc_params_factuurschema"
+ " , cnt_contract_omschrijving"
+ " , dp.cnt_srtcontract_type"
+ " , cs.ins_discipline_image"
+ " , "+ lcl.xsqla('cs.ins_discipline_omschrijving','cs.ins_discipline_key')
+ " FROM cnt_contract c, cnt_disc_params dp, cnt_discipline cs"
+ " FROM cnt_contract c"
+ " , cnt_disc_params dp"
+ " , cnt_discipline cs"
+ " WHERE cnt_contract_key = " + cnt_key
+ " AND c.ins_discipline_key = cs.ins_discipline_key"
+ " AND c.ins_discipline_key = dp.cnt_ins_discipline_key";
@@ -70,6 +77,7 @@ if (cnt_key > 0)
if (oRs.eof)
shared.record_not_found();
hasFactuurschema = (oRs("cnt_disc_params_factuurschema").Value == 1);
var srtcontract_type = oRs("cnt_srtcontract_type").Value;
var cnt_contract_versie = oRs("cnt_contract_versie").Value;
if (copy)
tabtitle = L("lcl_cnt_copy") + " " + tabtitle.toLowerCase();
@@ -87,10 +95,25 @@ if (cnt_key > 0)
%>
<script type="text/javascript">
var cnt_key = <%=cnt_key%>;
var copy = (<%=(copy?1:0)%>)==1;
var verynew = (<%=(verynew?1:0)%>)==1;
var hasScope = (<%=((srtcontract_type != 4 && srtcontract_type != 6) ? 1 : 0)%>) == 1;
$(function ()
{
FcltMgr.setTitle("<%=safe.jsstring(tabtitle)%>", {hot: false});
<% if (cnt_key == -1) { %>FcltMgr.startEdit(window);<% } %>
if (cnt_key == -1)
{
FcltMgr.startEdit(window);
}
else
{
if (verynew && hasScope)
{ // Direct naar tab scope.
$("#frametabs").tabs({ "active": 1 }); // Open direct het scope subframe (2de frame/subtab, dus index == 1)
}
}
})
function contractClose(params)
@@ -98,12 +121,12 @@ if (cnt_key > 0)
if (params.close)
{
FcltMgr.closeDetail(window, { cancel: true } );
return true;;
return true;
}
if (params.keepForm)
return;
<% if (cnt_key == -1 || copy)
{ %>
if (cnt_key == -1 || copy)
{
if (params.cancel)
{
FcltMgr.closeDetail(window, params );
@@ -111,16 +134,14 @@ if (cnt_key > 0)
}
FcltMgr.setTitle(L("lcl_contract") + " " + params.cnt_key, {hot:false});
// TODO geleend van MLD. Is dit hier nodig? Ook is cnt_key niet de juiste tabtekst, maar zien we die?
// nieuw contract, ga verder in 'verynew' modus
// Nieuw contract, ga verder in 'verynew' modus
// Altijd complete reload, we hebben nu een cnt_key namelijk
window.location.href = "cnt_contract.asp?verynew=1&cnt_key=" + params.cnt_key;
<% }
}
else
{ // Bestaand contract bewerkt, switch naar show-mode
%>
$("#cntframe")[0].src = "cnt_show_contract.asp?cnt_key=<%=cnt_key%>";
<% } %>
$("#cntframe")[0].src = "cnt_show_contract.asp?cnt_key=" + cnt_key;
}
}
function scopeClose(params)
@@ -257,6 +278,9 @@ if (cnt_key > 0)
oRs.close();
if (cnt_typecontract != 4 && cnt_typecontract != 6) {
page = "cnt_show_scope.asp?cnt_key=" + cnt_key;
if (verynew) { // Open cnt_edit_scope door in cnt_show_scope gelijk de wijzig-button te activeren.
page += "&verynew=1";
}
IFRAMER("scopeframe", page, { icon: "fa-list", FcltClose: "scopeClose" } );
}

View File

@@ -30,13 +30,11 @@ var isNew = (cnt_key < 0);
var sql = "SELECT cdp.cnt_srtcontract_type"
+ " , cdp.cnt_disc_params_opties"
+ " , cdp.cnt_disc_params_approve_new"
+ " FROM cnt_disc_params cdp"
+ " WHERE cdp.cnt_ins_discipline_key = " + cnt_disc_key;
var oRs = Oracle.Execute(sql);
var srtcontract_type = oRs("cnt_srtcontract_type").Value;
var magAutomatischVerlengen = (oRs("cnt_disc_params_opties").Value & 1) == 1;
var nieuwAltijdAccorderen = (oRs("cnt_disc_params_approve_new").Value == 1);
var doapprove = S("cnt_contract_approval") == 1;
oRs.Close();
@@ -71,14 +69,8 @@ else
var authparams = user.checkAutorisation(autfunction);
// Als het approval mechanisme actief is dan altijd eerst naar status Nieuw(2),
// Staat in het contractsoort dat een nieuw contract altijd geaccordeerd moet worden dan wordt de status "Ter goedkeuring" (3).
// uitgezonderd de Mantel/Master contracten, die gaan altijd langs het goedkeuringsproces.
var nieuw_cnt_status = 0;
if (doapprove && srtcontract_type != 6)
{
nieuw_cnt_status = (nieuwAltijdAccorderen ? 3 : 2);
}
var cnt_info = { contract_status: nieuw_cnt_status };
var cnt_info = { contract_status: (doapprove && srtcontract_type != 6? 2 : 0) }
}
// Bestaat het contractnummer al?
@@ -220,7 +212,6 @@ else
}
else
// Zetten van de contact status. Indien het contract approval mechanisme actief is dan moet de contract status Nieuw(2) worden en anders Actief(0).
// Staat in het contractsoort dat een nieuw contract altijd geaccordeerd moet worden dan wordt de status "Ter goedkeuring" (3).
// Uitgezonderd de Mantel/Master contracten, die gaan altijd langs het goedkeuringsproces naar de status Actief(0).
cnt.setcontractstatus(cnt_key, cnt_info.contract_status); // Zorgt ook voor tracking en daarmee notificatie.
}

View File

@@ -29,6 +29,7 @@ user.auth_required_or_abort(this_cnt.canReadAny);
var showall = getQParamInt("showall", 0) == 1;
var outputmode = getQParamInt("outputmode", 0);
var verynew = getQParamInt("verynew", 0);
%>
<html>
<head>
@@ -57,6 +58,14 @@ var outputmode = getQParamInt("outputmode", 0);
}
FcltMgr.openDetail(url, "");
}
$(function () {
var scopeRequired = (<%=verynew%>==1); // Voor een nieuw contract waarbij de scope moet worden ingevuld
if (scopeRequired) { // gelijk doorsturen naar cnt_edit-scope.
cnt_scopechange();
}
});
</script>
</head>
<body id="listbody">

View File

@@ -1,309 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Facilitor Consoles 2022 Preview</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Custom fonts for this template -->
<link href="../FontAwesome/css/fontawesome.min.css" rel="stylesheet" type="text/css">
<link href="../FontAwesome/css/solid.min.css" rel="stylesheet" type="text/css">
<link
href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i"
rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/sb-admin-2.min.css" rel="stylesheet">
<!-- Custom styles for this page -->
<link href="vendor/datatables/dataTables.bootstrap4.min.css" rel="stylesheet">
<!-- Dark mode -->
<link rel="stylesheet" href="dark-mode.css">
<!-- Facilitor style overrules for this page -->
<link rel="stylesheet" href="consoles.css">
</head>
<body id="page-top" class="h-100 bg-white">
<div id="wrapper">
<div id="content-wrapper" class="bg-cornsilk d-flex flex-column">
<div class="jumbotron text-center bg-linen shadow">
<h1><i class="fa fa-heartbeat fa-2x" aria-hidden="true"></i> Facilitor Consoles <i class="fa fa-eye" aria-hidden="true"></i><i>preview</i></h1>
<p>Gebouwenconsole</p>
</div>
<header class="mb-auto bg-transparent">
<nav class="nav justify-content-center float-right">
<div class="nav-link">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="fluidSwitch">
<label class="custom-control-label" for="fluidSwitch">Fluid mode</label>
</div>
</div>
<div class="nav-link">
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="darkSwitch">
<label class="custom-control-label" for="darkSwitch">Dark Mode</label>
</div>
</div>
</nav>
</header>
<div class="container mb-3">
<div class="row">
<div class="col-xl-7">
<div class="card shadow bg-light" style="min-height: 500px;">
<div class="card-body">
<div id="list-locations" class="table-responsive">
<h2>Locaties</h2>
<p>Loading..</p>
</div>
</div>
</div>
</div>
<div class="col-xl-5">
<div class="" style="min-height: 500px; overflow: hidden;">
<div class="row h-100" hidden>
<div class="card col-xl-12 p-0 bg-light">
<div class="card-body p-0 col-xl-12">
<div id="building-map" class="h-50">
</div>
<div id="building-view" class="h-50">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container mb-3">
<div class="row">
<div class="col-xl-7">
<div class="card shadow bg-light">
<div class="card-body">
<div id="list-buildings" class="table-responsive" style="min-height: 500px;">
<h2>Gebouwen</h2>
<p>Loading..</p>
</div>
</div>
</div>
</div>
<div class="col-xl-5">
<div class="card shadow bg-light overflow-auto" style="min-height: 500px;">
<div class="card-body">
<div id="show-location " hidden>
<h2>Details</h2>
<p>-</p>
</div>
<div id="show-building" hidden>
</div>
</div>
</div>
</div>
</div>
<div class="row" hidden>
<div class="col-xl-12">
<div class="card shadow bg-light" style="min-height: 500px;">
<div class="card-body">
<div id="show-floors">
<div id="filter-floors">
</div>
<div>
<figure class="figure">
<img class="figure-img img-fluid rounded" alt="plan" hidden>
</figure>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-xl-7">
<div class="card shadow col-xl-12 bg-light" style="min-height: 175px;">
<div class="card-body">
<div id="filter-disciplinetypes" class="table-responsive">
<h2>Vakgroeptypen</h2>
<p>Filter meldingen op vakgroeptype</p>
</div>
</div>
</div>
<div class="card shadow col-xl-12 bg-light" style="min-height: 325px;">
<div class="card-body">
<div id="filter-issuedisciplines" class="table-responsive">
<h2>Vakgroepen</h2>
<p>Filter meldingen op Vakgroep</p>
</div>
</div>
</div>
<div class="card shadow col-xl-12 bg-light" hidden>
<div class="card-body">
<div id="filter-issuetypes" class="table-responsive">
<h2>Standaardmeldingen</h2>
<p>Filter meldingen op type melding</p>
</div>
</div>
</div>
</div>
<div class="col-xl-5">
<div class="card shadow col-xl-12 h-100 bg-light" style="min-height: 500px; height: 100%;">
<div class="card-body">
<div id="show-reportx">
</div>
<div class="chart-area">
<canvas id="show-report"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row" hidden>
<div class="col-xl-7">
<div class="card mb-3 shadow bg-light" style="min-height: 500px;">
<div class="card-body">
<div id="list-issues" class="table-responsive">
<h2>Meldingen</h2>
<p>Kies hierboven een gebouw</p>
</div>
</div>
</div>
</div>
<div class="col-xl-5">
<div class="card mb-3 shadow bg-light overflow-auto" style="min-height: 500px;">
<div class="card-body">
<div id="show-issue" hidden>
<h2>Details</h2>
<p>-</p>
</div>
<div id="show-issue-object" hidden>
<h2>Object</h2>
<p>-</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row" hidden>
<div class="col-xl-7">
<div class="card mb-3 bg-light" style="min-height: 500px;">
<div class="card-body">
<div id="list-issue-orders">
<h2>Opdrachten</h2>
<p>-</p>
</div>
</div>
</div>
</div>
<div class="col-xl-5">
<div class="card mb-3 shadow bg-light overflow-auto" style="min-height: 500px;">
<div class="card-body">
<div id="show-order" hidden>
<h2>Details</h2>
<p>-</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row" hidden>
<div class="col-xl-7">
<div class="card mb-3 shadow bg-light" style="min-height: 500px;">
<div class="card-body">
<div id="list-contracts" class="table-responsive">
<h2>Contracten</h2>
<p>Loading..</p>
</div>
</div>
</div>
</div>
<div class="col-xl-5">
<div class="card mb-3 shadow bg-light overflow-auto">
<div class="card-body">
<div id="show-contract" hidden>
<h2>Details</h2>
<p>-</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container mb3">
<div class="row">
<div class="col-xl-7">
<div class="card shadow bg-light">
<div class="card-body">
<div id="show-about">
<h2>About</h2>
<p>Loading..</p>
</div>
</div>
</div>
</div>
<div class="col-xl-5">
<div class="card shadow bg-light">
<div class="card-body">
<div id="show-user">
<h2>User</h2>
<p>Loading..</p>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="sticky-footer bg-linen shadow">
<div class="container my-auto">
<div class="copyright text-center my-auto">
<span>Copyright &copy; Facilitor 2020</span>
</div>
</div>
</footer>
</div>
</div>
<!-- Bootstrap core JavaScript-->
<script src="../Localscripts/jquery.min.js"></script>
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Core plugin JavaScript-->
<script src="vendor/jquery-easing/jquery.easing.min.js"></script>
<!-- Custom scripts for all pages-->
<script src="js/sb-admin-2.min.js"></script>
<!-- Page level plugins -->
<script src="vendor/datatables/jquery.dataTables.min.js"></script>
<script src="vendor/datatables/dataTables.bootstrap4.min.js"></script>
<script src="vendor/chart.js/chart.min.js"></script>
<!-- Page level custom scripts -->
<script src="console.js"></script>
<script src="alg_locatie.js"></script>
<!-- You must load 'dark-mode-switch.js' after the dark-mode switch -->
<script src="dark-mode-switch.js"></script>
<!-- You must load 'fluid-mode-switch.js' after the dark-mode switch -->
<script src="fluid-mode-switch.js"></script>
<!-- Google Maps -->
<script async defer
src="https://maps.googleapis.com/maps/api/js?libraries=places&key=AIzaSyDYQ8CWgmaNMzTJnAiazxrrkjNjsxGQxvo"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -1,884 +0,0 @@
/*
$Revision$
$Id$
File: console.js
Description: Generic include file for consoles for Facilitor
*/
var targets = {},
models = {},
day_in_ms = 86400000,
language = "EN",
windowObjectReference,
environment = "production";
/* System constants */
var dataTables_i18n = {
NL: {
"sProcessing": "Bezig...",
"sLengthMenu": "_MENU_ resultaten weergeven",
"sZeroRecords": "Geen resultaten gevonden",
"sInfo": "_START_ tot _END_ van _TOTAL_ resultaten",
"sInfoEmpty": "Geen resultaten om weer te geven",
"sInfoFiltered": " (gefilterd uit _MAX_ resultaten)",
"sInfoPostFix": "",
"sSearch": "Zoeken:",
"sEmptyTable": "Geen resultaten aanwezig in de tabel",
"sInfoThousands": ".",
"sLoadingRecords": "Een moment geduld aub - bezig met laden...",
"oPaginate": {
"sFirst": "Eerste",
"sLast": "Laatste",
"sNext": "Volgende",
"sPrevious": "Vorige"
},
"oAria": {
"sSortAscending": ": activeer om kolom oplopend te sorteren",
"sSortDescending": ": activeer om kolom aflopend te sorteren"
}
},
DE: {
"sEmptyTable": "Keine Daten in der Tabelle vorhanden",
"sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen",
"sInfoEmpty": "Keine Daten vorhanden",
"sInfoFiltered": "(gefiltert von _MAX_ Einträgen)",
"sInfoPostFix": "",
"sInfoThousands": ".",
"sLengthMenu": "_MENU_ Einträge anzeigen",
"sLoadingRecords": "Wird geladen ..",
"sProcessing": "Bitte warten ..",
"sSearch": "Suchen",
"sZeroRecords": "Keine Einträge vorhanden",
"oPaginate": {
"sFirst": "Erste",
"sPrevious": "Zurück",
"sNext": "Nächste",
"sLast": "Letzte"
},
"oAria": {
"sSortAscending": ": aktivieren, um Spalte aufsteigend zu sortieren",
"sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren"
},
"select": {
"rows": {
"_": "%d Zeilen ausgewählt",
"0": "",
"1": "1 Zeile ausgewählt"
}
},
"buttons": {
"print": "Drucken",
"colvis": "Spalten",
"copy": "Kopieren",
"copyTitle": "In Zwischenablage kopieren",
"copyKeys": "Taste <i>ctrl</i> oder <i>\u2318</i> + <i>C</i> um Tabelle<br>in Zwischenspeicher zu kopieren.<br><br>Um abzubrechen die Nachricht anklicken oder Escape drücken.",
"copySuccess": {
"_": "%d Zeilen kopiert",
"1": "1 Zeile kopiert"
},
"pageLength": {
"-1": "Zeige alle Zeilen",
"_": "Zeige %d Zeilen"
}
}
},
EN: {
"sEmptyTable": "No data available in table",
"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
"sInfoEmpty": "Showing 0 to 0 of 0 entries",
"sInfoFiltered": "(filtered from _MAX_ total entries)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Show _MENU_ entries",
"sLoadingRecords": "Loading...",
"sProcessing": "Processing...",
"sSearch": "Search:",
"sZeroRecords": "No matching records found",
"oPaginate": {
"sFirst": "First",
"sLast": "Last",
"sNext": "Next",
"sPrevious": "Previous"
},
"oAria": {
"sSortAscending": ": activate to sort column ascending",
"sSortDescending": ": activate to sort column descending"
}
},
FR: {
"sEmptyTable": "Aucune donnée disponible dans le tableau",
"sInfo": "Affichage de l'élément _START_ à _END_ sur _TOTAL_ éléments",
"sInfoEmpty": "Affichage de l'élément 0 à 0 sur 0 élément",
"sInfoFiltered": "(filtré à partir de _MAX_ éléments au total)",
"sInfoPostFix": "",
"sInfoThousands": ",",
"sLengthMenu": "Afficher _MENU_ éléments",
"sLoadingRecords": "Chargement...",
"sProcessing": "Traitement...",
"sSearch": "Rechercher :",
"sZeroRecords": "Aucun élément correspondant trouvé",
"oPaginate": {
"sFirst": "Premier",
"sLast": "Dernier",
"sNext": "Suivant",
"sPrevious": "Précédent"
},
"oAria": {
"sSortAscending": ": activer pour trier la colonne par ordre croissant",
"sSortDescending": ": activer pour trier la colonne par ordre décroissant"
},
"select": {
"rows": {
"_": "%d lignes sélectionnées",
"0": "Aucune ligne sélectionnée",
"1": "1 ligne sélectionnée"
}
}
}
};
/* global functions */
// console messages for development support
window.console.original_log = window.console.log;
window.console.log = function (msg, force) {
if (environment == "development" || force) {
window.console.original_log(msg);
}
};
// return the data of a single object or of a row object (e.g. obj.data["issue"] or obj.data["issues"][row])
function rowInfo(obj, row) {
"use strict";
return (obj.single ? obj.data[obj.table] : obj.data[obj.table][row]);
}
// return the value of a column
function dataInfo(obj, row, column) {
"use strict";
return rowInfo(obj, row)[column];
}
// return a formatted column value according to the column_type
function typeFormat(parms) {
"use strict";
switch (parms.column_type) {
case "datetime":
if (parms.single) {
// return the datevalue in case of a single object column
return new Date(parms.value);
}
return new Intl.DateTimeFormat(undefined, {
dateStyle: 'medium',
timeStyle: 'short',
hour: '2-digit',
minute: '2-digit'
}).format(new Date(parms.value));
// niet na een return break;
case "date":
if (parms.single) {
// return the datevalue in case of a single object column
return new Date(parms.value);
}
return new Intl.DateTimeFormat(undefined, {
dateStyle: 'medium'
}).format(new Date(parms.value));
// niet na een return break;
case "integer":
return parseInt(parms.value, 10);
// niet na een return break;
case "number":
// return safe number
return $.fn.dataTable.render.number().display(parms.value);
// niet na een return break;
default:
// return safe text
return $.fn.dataTable.render.text().display(parms.value);
}
}
// return label of the column
function columnType(obj, column) {
"use strict";
// determine column_type from [ targets[target].columns[column].type ] or from [ models[model].field[column].type ] or from fallback value "text"
return (obj.columns[column].type || (models[obj.url].fields[column] && models[obj.url].fields[column].type) || "text");
}
// return label of the column
function columnLabel(obj, column) {
"use strict";
// determine label from [ models[model].field[column].label ] or else from [ target.columns[column].label ] or else from [ column name ]
return ((models[obj.url].fields[column] && models[obj.url].fields[column].label) || obj.columns[column].label || column);
}
// return value of the column (single value or [column].name value)
function columnValue(data) {
"use strict";
// determine whether the value is an object with a { name: value }
return (data && typeof data.name !== "undefined" ? data.name || "" : data || "");
}
// return the formatted column value, independent of single object or row object
function dataFormat(obj, row, column) {
"use strict";
// get column value (as single value or as { id: xx, name: yy })
var data = dataInfo(obj, row, column);
return typeFormat({
value: columnValue(data),
column_type: columnType(obj, column),
single: obj.single
});
}
// return combined server-data and targets[target]/models[model][column] information object
function columnInfo(obj, row, column) {
"use strict";
var data, column_label, column_data, column_type, column_valuemin, column_valuemax, column_recid;
// get column value (as single value or as { id: xx, name: yy })
data = dataInfo(obj, row, column);
// get column label
column_label = columnLabel(obj, column);
// get formatted column value
column_data = dataFormat(obj, row, column);
// get column_type
column_type = columnType(obj, column);
// determine minimum value (only for use in a progressbar)
column_valuemin = (obj.columns[column].valuemin || 0);
// determine maximum value (only for use in a progressbar)
column_valuemax = (obj.columns[column].valuemax || 100);
// determine record id in case the column is a foreign table value
column_recid = (data && typeof data.id !== "undefined" ? parseInt(data.id, 10) : false);
return {
data: data,
column_label: column_label,
column_data: column_data,
column_type: column_type,
column_valuemin: column_valuemin,
column_valuemax: column_valuemax,
column_recid: column_recid
};
}
// return the column [ data-order ] value, used for ordering DataTable rows ([ date ] or [ datetime ] serial number only)
function dataOrder(obj, row, column) {
"use strict";
var column_type = columnType(obj, column),
value, data = dataInfo(obj, row, column);
if (obj.single) {
value = "";
} else {
value = columnValue(data);
}
switch (column_type) {
case "datetime":
case "date":
return new Date(value).getTime();
// niet na een return break;
default:
return false;
}
}
// return DataTable settings based on targets[target]columns
function tColumnDefs(obj) {
"use strict";
var defs = {
language: dataTables_i18n[language],
columnDefs: []
},
index = 0;
$.each(obj.columns, function (key, value) {
if (key !== "id") {
if (value.hidden) {
defs.columnDefs.push({
targets: [index],
visible: false,
searchable: true
});
}
index++;
}
});
console.log(defs);
return defs;
}
// return tableHeader row
function theadColumns(obj) {
"use strict";
var thead = "",
column;
for (column in obj.columns) {
if (column !== "id") {
thead += '<th>' + $.fn.dataTable.render.text().display(columnLabel(obj, column)) + '</th>';
}
}
return thead;
}
// return tableBody rows
function tbodyData(obj) {
"use strict";
var tbody = "",
row, column, order, col_info;
for (row = 0; row < obj.data[obj.table].length; row += 1) {
tbody += '<tr recid=' + obj.data[obj.table][row].id + '>';
for (column in obj.columns) {
if (column !== "id") {
col_info = columnInfo(obj, row, column);
tbody += '<td name="' + column + '"' +
(col_info.column_recid ? 'recid="' + col_info.column_recid + '"' : '') +
((order = dataOrder(obj, row, column)) ? 'data-order="' + order + '"' : '') +
'>' +
col_info.column_data +
'</td>';
}
}
tbody += '</tr>';
}
return tbody;
}
// return formdata (single record form)
function formData(obj) {
"use strict";
var target_selector = targets[obj.target].selector;
var formbody = "",
column, column_id, col_info;
for (column in obj.columns) {
if (column !== "id" && !(targets[obj.target].columns[column].hidden || false)) {
column_id = target_selector + "-" + column;
col_info = columnInfo(obj, undefined, column);
col_info.column_id = column_id;
col_info.single = obj.single;
formbody +=
'<div class="form-group form-group-sm pb-0 mb-0 form-row">' +
'<label for="' + column_id + '" class="col-sm-4 col-form-label text-nowrap">' + col_info.column_label + '</label>' +
new Field(col_info).render() +
'</div>';
}
}
return formbody;
}
// return filterdata (buttons for filtering DataTable data)
function filterData(obj) {
"use strict";
// var container_selector = targets[obj.target].selector;
var formbody = "",
row, column, col_info,
btn_size_class = targets[obj.target].btn_size_class,
btn_has_icon = targets[obj.target].btn_has_icon,
icon_column = targets[obj.target].icon_column,
color_column = targets[obj.target].color_column,
icon;
for (row = 0; row < obj.data[obj.table].length; row += 1) {
if (icon_column && !!obj.data[obj.table][row][icon_column] && obj.data[obj.table][row][icon_column].substring(0, 3) == "fa-") {
icon = obj.data[obj.table][row][icon_column];
} else {
icon = "fa-tag";
}
formbody += '<button type="button" class="btn text-center ' + btn_size_class + ' ' + settings.btn_text_class + ' ' + settings.btn_class + '" recid=' + obj.data[obj.table][row].id + (color_column && !!obj.data[obj.table][row][color_column] ? ' color="' + obj.data[obj.table][row][color_column].split(";")[0] + '"' : "") + '>' +
'<div class="">' + (btn_has_icon ? '<i class="fa ' + icon + ' fa-lg"></i>' : "") + '</div>';
for (column in obj.columns) {
if (column !== "id") {
col_info = columnInfo(obj, row, column);
formbody += '<div class="' + (targets[obj.target].columns[column].hidden ? "" : "d-inline-block text-truncate") + '" name="' + column + '"' +
((targets[obj.target].columns[column].hidden || false) ? "hidden" : '') +
(col_info.column_recid ? ' recid=' + col_info.column_recid : '') + '>' +
"<small>" +
((targets[obj.target].columns[column].hidden || false) ? '' : col_info.column_data) +
'</small></div>';
}
}
formbody += '<div name="badge"></div>';
formbody += '</button>';
}
return formbody;
}
// populate the target (datatable, form or filter)
function populate(obj) {
"use strict";
// the model needs to be present (loaded) for correct workings, except for reports (graphs)
if (targets[obj.target].report || models[obj.url].id) {
var $this = $("#" + targets[obj.target].selector),
h2;
obj.columns = obj.columns || targets[obj.target].columns;
console.log("populate: " + obj.target);
obj.table = obj.single || obj.url;
h2 = '<h2 name="formtitle">' + (lcl[language][targets[obj.target].title] || obj.table) + '</h2>';
obj.single = obj.single || false;
// render single record form html
if (obj.single) {
var fdata = formData(obj);
$this.html(h2 + '<form id="' + targets[obj.target].selector + '-form">' + fdata + '</form>' + new Customfields(obj).render());
// render buttons from rows for filter form html
} else if (targets[obj.target].filter) {
var fdata = filterData(obj);
$this.html(h2 + '<form id="' + targets[obj.target].selector + '-form" class="form-inline">' + fdata + '</form>');
// render h2 header only for report
} else if (targets[obj.target].report) {
$this.html(h2);
// render table html
} else {
var $this, thead, tbody, table;
thead = '<thead class="thead-dark">' + theadColumns(obj) + '</thead>';
tbody = '<tbody>' + tbodyData(obj) + '</tbody>';
table = '<table class="table table-sm table-striped table-hover" name="' + obj.target + '">' + thead + tbody + '</table>';
$this.html(h2 + table);
}
// set trigger(s) if available
if (targets[obj.target].trigger) {
$(targets[obj.target].trigger_selector, $this).off().on(targets[obj.target].events, targets[obj.target].trigger);
}
// run ready function if available
if (targets[obj.target].ready) {
targets[obj.target].ready(obj);
}
} else {
console.log("model " + obj.url + "not yet present!");
// retry the populate until the model is present
setTimeout(function () {
populate(obj);
}, 100);
}
}
// save the model definition in models
function setModel(obj) {
"use strict";
if (obj.model) {
models[obj.model] = obj.data;
obj.data.fields.forEach(function (field) {
models[obj.model].fields[field.id] = field;
});
}
}
// get api2 data through ajax
function api2(obj) {
"use strict";
if (obj.target) {
obj.filter = (Object.keys(targets[obj.target].columns).length ? (obj.filter ? obj.filter + "&" : "?") + "fields=" + Object.keys(targets[obj.target].columns).join(",") : obj.filter || "");
}
var ajaxHdl = $.ajax({
url: settings.facilitor_url + "api2/" + obj.url + (obj.filter || ""),
dataType: "json",
success: function (data, textStatus, jqXHR) {
console.log("Ajax success start: " + (obj.target || obj.model));
obj.data = data;
if (obj.model) {
setModel(obj);
} else {
populate(obj);
}
console.log(data);
console.log("Ajax success stop: " + (obj.target || obj.model));
},
complete: function (jqXHR, textStatus) {
console.log("Ajax complete: " + (obj.target || obj.model));
}
});
console.log({
target: (obj.target || "model_" + obj.model),
ajaxHdl: ajaxHdl
});
}
// google maps initialisation
var map, marker, geocoder, panorama, selector;
// google maps interface to set a location and a marker
function codeAddress(address) {
"use strict";
geocoder.geocode({
'address': address
}, function (results, status) {
if (status == 'OK') {
map.setCenter(results[0].geometry.location);
marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
panorama.setPosition(results[0].geometry.location);
panorama.addListener('position_changed', function () {
if (!panorama.getVisible()) {
panorama.setVisible(true);
}
});
$("#" + selector).closest(".row").attr("hidden", false);
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
// google maps initialisation and first location set to Facilitor
function initAutocomplete(mapselector, viewselector, location) {
"use strict";
selector = mapselector;
// The location of Facilitor
var facilitor = location || {
lat: 52.216670,
lng: 6.946060
};
// map part
map = new google.maps.Map(
document.getElementById(mapselector), {
zoom: 13,
center: facilitor,
mapTypeId: 'roadmap'
});
marker = new google.maps.Marker({
map: map,
position: facilitor
});
// streetview part
panorama = new google.maps.StreetViewPanorama(
document.getElementById(viewselector), {
position: facilitor,
panControl: false,
addressControl: false,
pov: {
heading: 34,
pitch: 20
}
});
map.setStreetView(panorama);
geocoder = geocoder || new google.maps.Geocoder();
$("#" + mapselector).closest(".row").attr("hidden", !location);
}
/* settings and functions from refactoring of targets object */
var settings = {
facilitor_url: "../../",
btn_class: "btn-secundary",
btn_text_class: "text-dark",
btn_selected_class: "btn-success",
btn_partial_class: "btn-success",
btn_size_class: "col-sm-3",
btn_has_icon: true,
icon_column: false,
color_column: false
};
// set partial, full or no class on parent button dependent on the number of selected child buttons
function setParentSelectedClass(parms) {
"use strict";
var selected = $("button:visible." + settings.btn_selected_class + " div[name=" + parms.name + "][recid=" + parms.value + "]", parms.context).length;
var present = $("button:visible div[name=" + parms.name + "][recid=" + parms.value + "]", parms.context).length;
// reset classes to default
var button = $("button[recid=" + parms.value + "]", parms.parent)
.removeClass(settings.btn_selected_class + ' ' + settings.btn_partial_class)
.addClass(settings.btn_class + ' ' + settings.btn_text_class)
.css({
backgroundColor: ""
});
// all childs are selected
if (present == selected) {
button
.addClass(settings.btn_selected_class)
.removeClass(settings.btn_class + ' ' + settings.btn_text_class)
.css({
backgroundColor: (button.attr("color") ? button.attr("color") : "")
});
// part of the childs are selected
} else if (selected > 0) {
button
.addClass(settings.btn_selected_class + ' ' + settings.btn_partial_class)
.removeClass(settings.btn_class + ' ' + settings.btn_text_class)
.css({
backgroundColor: (button.attr("color") ? button.attr("color") : "")
});
}
return button;
}
// set full or no class on child buttons dependent on the parent button
function setChildSelectedClass(parms) {
"use strict";
var button;
var items = $("button div[name=" + parms.name + "][recid=" + parms.$this.attr("recid") + "]", parms.parent);
items
.each(
function () {
button = $(this).closest("button");
button
.removeClass(settings.btn_partial_class)
.toggleClass(settings.btn_selected_class, parms.$this.hasClass(settings.btn_selected_class))
.toggleClass(settings.btn_class, !parms.$this.hasClass(settings.btn_selected_class))
.toggleClass(settings.btn_text_class, !parms.$this.hasClass(settings.btn_selected_class))
.css({
backgroundColor: (button.attr("color") && button.hasClass(settings.btn_selected_class) ? button.attr("color") : "")
});
}
);
return items;
}
// set color of child-buttons to color of parent-button when a child-button has no specific color of it's own
function setChildrenColor(parms) {
"use strict";
var $this, parent;
var items = $("button:not([color]) div[name=" + parms.name + "]", parms.context);
items
.each(
function () {
$this = $(this);
// parent button has a specific colour
parent = $("button[recid=" + $this.attr("recid") + "]", parms.parent);
if (parent.length) {
$this.closest("button")
.attr("color", parent.attr("color"))
.css({
backgroundColor: parent.attr("color")
});
}
}
);
}
// save recid's of selected buttons in [ context ]
function saveSelectedbuttonIds(parms) {
"use strict";
targets[parms.target].selected_ids = [];
$("button." + settings.btn_selected_class, parms.context).each(function () {
targets[parms.target].selected_ids.push($(this).attr("recid"));
});
}
// save recid's used in table
function saveUsedtabledataIds(parms) {
"use strict";
var index, recid, key_count = {};
targets[parms.target].selected_ids = [];
$("td[name=" + parms.name + "]", parms.context).each(function () {
recid = $(this).attr("recid");
key_count[recid] = key_count[recid] ? key_count[recid] + 1 : 1;
index = targets[parms.target].selected_ids.indexOf(recid);
if (index === -1) {
targets[parms.target].selected_ids.push(recid);
}
});
return key_count;
}
// set classes for button dependent on button_selected_class
function setButtonClasses(parms) {
"use strict";
parms.$this.removeClass(settings.btn_selected_class == settings.btn_partial_class ? "" : settings.btn_partial_class)
.toggleClass(settings.btn_selected_class)
.toggleClass(settings.btn_class, !parms.$this.hasClass(settings.btn_selected_class))
.toggleClass(settings.btn_text_class, !parms.$this.hasClass(settings.btn_selected_class))
.css({
backgroundColor: (parms.$this.attr("color") && parms.$this.hasClass(settings.btn_selected_class) ? parms.$this.attr("color") : "")
});
}
// reset classes for all buttons
function resetAllButtonClasses(parms) {
"use strict";
$("button", parms.context)
.removeClass(settings.btn_partial_class + ' ' + settings.btn_selected_class)
.addClass(settings.btn_class + ' ' + settings.btn_text_class)
.css({
backgroundColor: ""
});
}
// set hidden attr for buttons dependent on button_selected_class
function setButtonHidden(parms) {
"use strict";
$("button", parms.context)
.attr("hidden", function () {
$(this).attr("hidden", !$(this).hasClass(settings.btn_selected_class))
});
}
// autoselect first row in case there is only 1 result
function autoselectRow(parms) {
"use strict";
// select (click) the first row if there is only 1 result
if ($("tbody tr", "#" + targets[parms.target].selector).length == 1) {
$("tbody tr:first", "#" + targets[parms.target].selector).click();
}
}
// redraw the table and select first row in case there is only 1 result
function redrawTable(parms) {
"use strict";
targets[parms.target].data_table.draw();
$("#" + targets[parms.target].selector).closest("div.card").resize();
autoselectRow(parms);
}
// resize innerHeight of target-card to innerHeight of base-card
function resizeCard(targetselector, baseselector) {
function _resizeCard() {
console.log("resize " + targetselector);
$("#" + targetselector).closest("div.card").innerHeight($("#" + baseselector).closest("div.card").innerHeight());
}
return function _setTimeout() {
setTimeout(_resizeCard, 100);
}
}
/* Objects to be used for rendering dashboards */
// Object with render function to return field html (without label)
function Field(parms) {
"use strict";
var self = this,
date, time;
// prefix a string with a zero when string length < length to be used ( hour/minute/day/month fields )
var prefixZero = function (str, len) {
return ("0" + str).slice(-len);
};
this.single = parms.single;
this.column_name = parms.column_name;
this.column_type = parms.column_type;
this.column_id = parms.column_id;
this.column_data = typeFormat({
value: (parms.column_data || ""),
column_type: parms.column_type,
single: parms.single
});
this.column_valuemin = parms.column_valuemin;
this.column_valuemax = parms.column_valuemax;
this.render = function () {
switch (self.column_type) {
case "progressbar":
return '<div class="col-sm-8 progress" style="height: 2rem;">' +
'<div class="progress-bar progress-bar-info form-control form-control-sm" role="progressbar" id="' + self.column_id + '" style="width: ' + Math.round(1 / self.column_valuemax * self.column_data * 100) + '%;" aria-valuenow="' + self.column_data + '" aria-valuemin="' + self.column_valuemin + '" aria-valuemax="' + self.column_valuemax + '"></div>' +
'</div>';
// niet na een return break;
case "check":
return '<div class="form-check">' +
'<input type="checkbox" class="form-control form-control-sm form-check-input" id="' + self.column_id + '" name=' + self.column_name + (self.column_data == 1 ? ' checked' : '') + ' disabled>' +
'</div>';
// niet na een return break;
case "textarea":
return '<div class="col-sm-8">' +
'<textarea class="sm-textarea form-control form-control-sm" id="' + self.column_id + '" readonly>' + self.column_data + '</textarea>' +
'</div>';
// niet na een return break;
case "date":
date = self.column_data == "" ? "" : self.column_data.getFullYear().toString() + "-" + prefixZero((self.column_data.getMonth() + 1).toString(), 2) + "-" + prefixZero(self.column_data.getDate().toString(), 2);
return '<div class="col-sm-8">' +
'<input type="date" class="form-control form-control-sm" id="' + self.column_id + '" name=' + self.column_name + '" value="' + date + '" readonly>' +
'</div>';
// niet na een return break;
case "datetime":
time = self.column_data == "" ? "" : prefixZero(self.column_data.getHours().toString(), 2) + ":" + prefixZero(self.column_data.getMinutes().toString(), 2);
date = self.column_data == "" ? "" : self.column_data.getFullYear().toString() + "-" + prefixZero((self.column_data.getMonth() + 1).toString(), 2) + "-" + prefixZero(self.column_data.getDate().toString(), 2);
return '<div class="col-sm-5">' +
'<input type="date" class="form-control form-control-sm" id="' + self.column_id + '" name=' + self.column_name + '" value="' + date + '" readonly>' +
'</div>' +
'<div class="col-sm-3">' +
'<input type="time" class="form-control form-control-sm" id="' + self.column_id + '_time" name=' + self.column_name + '_time" value="' + time + '" readonly>' +
'</div>';
// niet na een return break;
case "time":
time = self.column_data == "" ? "" : prefixZero(self.column_data.getHours().toString(), 2) + ":" + prefixZero(self.column_data.getMinutes().toString(), 2);
return '<div class="col-sm-3">' +
'<input type="time" class="form-control form-control-sm" id="' + self.column_id + '_time" name=' + self.column_name + '_time" value="' + time + '" readonly>' +
'</div>';
// niet na een return break;
default:
return '<div class="col-sm-8">' +
'<input type="' + self.column_type + '" class="form-control form-control-sm" id="' + self.column_id + '" name=' + self.column_name + '" value="' + self.column_data + '" readonly>' +
'</div>';
// niet na een return break;
}
}
console.log(self);
}
// Object with render function to return label and customfield html
function Customfield(parms) {
"use strict";
var self = this;
this.single = parms.single;
this.column_name = parms.column_name;
this.custom_field = parms.custom_field;
this.selector = parms.selector;
this.column_id = parms.selector + "-" + self.custom_field.propertyid;
// translate customfield-type to model field-type
this.custom_field_type = function () {
switch (self.custom_field.type) {
case "V":
return "check";
case "D":
return "date";
case "T":
return "time";
case "N":
return "number";
default:
return "text";
}
}
this.render = function () {
return '<div class="form-group form-group-sm pb-0 mb-0 form-row">' +
'<label for="' + self.column_id + '" class="col-sm-4 col-form-label text-nowrap">' + self.custom_field.label + '</label>' +
new Field({
single: self.single,
column_name: self.column_name,
column_id: self.column_id,
column_type: self.custom_field_type(),
column_data: self.custom_field.value
}).render() +
'</div>';
}
console.log(self);
}
// Object with render function to return html for all customfields including labels
function Customfields(parms) {
"use strict";
var self = this;
// sort customfields on sequence
this.custom_fields = (parms.data[parms.table].custom_fields ? parms.data[parms.table].custom_fields.sort(function (a, b) {
return (a.sequence > b.sequence ? 1 : -1)
}) : []);
this.single = parms.single;
this.target = parms.target;
this.table = parms.table;
this.render = function () {
var fields = "",
custom_field;
if (targets[self.target].show_custom_fields && self.custom_fields.length) {
for (custom_field in self.custom_fields) {
// only customfields other than type Q, L or M
if (["Q", "L", "M"].indexOf(self.custom_fields[custom_field].type) == -1 && (targets[self.target].show_custom_field_when_empty || self.custom_fields[custom_field].value != null)) {
fields += new Customfield({
single: self.single,
column_name: custom_field,
selector: targets[self.target].selector,
custom_field: self.custom_fields[custom_field]
}).render();
}
}
}
return '<div name="custom-fields">' + fields + '</div>';
}
console.log(self);
}
// Object base for targets
function Target(parms) {
"use strict";
var self = this;
var choose = function (first_choice, fallback_choice) {
return (typeof first_choice != "undefined" ? first_choice : fallback_choice);
};
this.title = parms.title || "";
this.selector = parms.selector;
this.mode = parms.mode;
this.columns = choose(parms.columns, {});
this.events = choose(parms.events, "click");
this.trigger = parms.trigger || false;
this.ready = parms.ready || false;
this.filter = parms.filter || false;
this.report = parms.report || false;
this.trigger_selector = (this.filter ? "button" : "table tbody tr");
this.btn_size_class = choose(parms.btn_size_class, settings.btn_size_class);
this.btn_has_icon = choose(parms.btn_has_icon, true);
this.icon_column = choose(parms.icon_column, settings.icon_column);
this.color_column = choose(parms.color_column, settings.color_column);
this.show_custom_fields = parms.show_custom_fields || false;
this.show_custom_field_when_empty = parms.show_custom_field_when_empty || false;
console.log(self);
}

View File

@@ -1,55 +0,0 @@
body {
font-size: 0.85rem;
}
.col, .col-1, .col-10, .col-11, .col-12, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-auto, .col-lg, .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-auto, .col-md, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-auto, .col-sm, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-auto {
padding-left: 8px;
padding-right: 8px;
}
#list-locations tbody tr:hover,#list-buildings tbody tr:hover,#list-issues tbody tr:hover,#list-issue-orders tbody tr:hover,#list-contracts tbody tr:hover {
cursor: pointer;
}
tr.table-success td,.table-hover .table-success:hover > td {
background-color: #9b1b30;
border-color: #9b1b30;
color: #fff;
}
.btn-success {
background-color: #9b1b30;
border-color: #f5d6c6;
}
.btn-success:hover {
border-color: #9b1b30;
}
.bg-linen {
background-color: #77212e !important;
color: #fff !important;
text-shadow: 0px 0px 12px #111;
xbackground: url(./img/Aareon-hello.jpg);
background: url(./img/Gebouwconsole-head.jpg);
background-position-y: center;
background-position-x: center;
background-repeat: no-repeat;
background-size: cover;
}
.bg-linen h1 {
font-weight: bold !important;
}
.bg-cornsilk {
background-color: #34558b !important;
color: #fff !important;
}
.bg-light {
background-color: #f7f1ee !important;
color: #000 !important;
}
[data-theme="dark"] .bg-cornsilk,[data-theme="dark"] .bg-linen {
background-color: black !important;
color: ivory !important;
}
div[name=badge] {
position: absolute;
top: 0;
right: 3px;
}

File diff suppressed because one or more lines are too long

View File

@@ -1,27 +0,0 @@
(function() {
var darkSwitch = document.getElementById("darkSwitch");
if (darkSwitch) {
initTheme();
darkSwitch.addEventListener("change", function(event) {
resetTheme();
});
function initTheme() {
var darkThemeSelected =
localStorage.getItem("darkSwitch") !== null &&
localStorage.getItem("darkSwitch") === "dark";
darkSwitch.checked = darkThemeSelected;
darkThemeSelected
? document.body.setAttribute("data-theme", "dark")
: document.body.removeAttribute("data-theme");
}
function resetTheme() {
if (darkSwitch.checked) {
document.body.setAttribute("data-theme", "dark");
localStorage.setItem("darkSwitch", "dark");
} else {
document.body.removeAttribute("data-theme");
localStorage.removeItem("darkSwitch");
}
}
}
})();

View File

@@ -1,22 +0,0 @@
[data-theme="dark"] {
background-color: #111 !important;
color: #eee;
}
[data-theme="dark"] .bg-light {
background-color: #000 !important;
}
div.jumbotron {
margin-bottom: 0;
}
[data-theme="dark"] .bg-white,
[data-theme="dark"] .jumbotron,
[data-theme="dark"] .btn {
background-color: #000 !important;
color: #eee;
}
[data-theme="dark"] .bg-black {
background-color: #eee !important;
}

View File

@@ -1,27 +0,0 @@
(function() {
var fluidSwitch = document.getElementById("fluidSwitch");
if (fluidSwitch) {
initFluidTheme();
fluidSwitch.addEventListener("change", function(event) {
resetFluidTheme();
});
function initFluidTheme() {
var fluidThemeSelected =
localStorage.getItem("fluidSwitch") !== null &&
localStorage.getItem("fluidSwitch") === "on";
fluidSwitch.checked = fluidThemeSelected;
fluidThemeSelected
? $("div.container").removeClass("container").addClass("container-fluid")
: $("div.container-fluid").removeClass("container-fluid").addClass("container");
}
function resetFluidTheme() {
if (fluidSwitch.checked) {
$("div.container").removeClass("container").addClass("container-fluid");
localStorage.setItem("fluidSwitch", "on");
} else {
$("div.container-fluid").removeClass("container-fluid").addClass("container");
localStorage.setItem("fluidSwitch", "off");
}
}
}
})();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -1,7 +0,0 @@
/*!
* Start Bootstrap - SB Admin 2 v4.0.7 (https://startbootstrap.com/template-overviews/sb-admin-2)
* Copyright 2013-2019 Start Bootstrap
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-sb-admin-2/blob/master/LICENSE)
*/
!function(t){"use strict";t("#sidebarToggle, #sidebarToggleTop").on("click",function(o){t("body").toggleClass("sidebar-toggled"),t(".sidebar").toggleClass("toggled"),t(".sidebar").hasClass("toggled")&&t(".sidebar .collapse").collapse("hide")}),t(window).resize(function(){t(window).width()<768&&t(".sidebar .collapse").collapse("hide")}),t("body.fixed-nav .sidebar").on("mousewheel DOMMouseScroll wheel",function(o){if(768<t(window).width()){var e=o.originalEvent,l=e.wheelDelta||-e.detail;this.scrollTop+=30*(l<0?1:-1),o.preventDefault()}}),t(document).on("scroll",function(){100<t(this).scrollTop()?t(".scroll-to-top").fadeIn():t(".scroll-to-top").fadeOut()}),t(document).on("click","a.scroll-to-top",function(o){var e=t(this);t("html, body").stop().animate({scrollTop:t(e.attr("href")).offset().top},1e3,"easeInOutExpo"),o.preventDefault()})}(jQuery);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,51 +0,0 @@
//
// Base styles
//
.alert {
position: relative;
padding: $alert-padding-y $alert-padding-x;
margin-bottom: $alert-margin-bottom;
border: $alert-border-width solid transparent;
@include border-radius($alert-border-radius);
}
// Headings for larger alerts
.alert-heading {
// Specified to prevent conflicts of changing $headings-color
color: inherit;
}
// Provide class for links that match alerts
.alert-link {
font-weight: $alert-link-font-weight;
}
// Dismissible alerts
//
// Expand the right padding and account for the close button's positioning.
.alert-dismissible {
padding-right: $close-font-size + $alert-padding-x * 2;
// Adjust close link position
.close {
position: absolute;
top: 0;
right: 0;
padding: $alert-padding-y $alert-padding-x;
color: inherit;
}
}
// Alternate styles
//
// Generate contextual modifier classes for colorizing the alert.
@each $color, $value in $theme-colors {
.alert-#{$color} {
@include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));
}
}

View File

@@ -1,54 +0,0 @@
// Base class
//
// Requires one of the contextual, color modifier classes for `color` and
// `background-color`.
.badge {
display: inline-block;
padding: $badge-padding-y $badge-padding-x;
@include font-size($badge-font-size);
font-weight: $badge-font-weight;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
@include border-radius($badge-border-radius);
@include transition($badge-transition);
@at-root a#{&} {
@include hover-focus {
text-decoration: none;
}
}
// Empty badges collapse automatically
&:empty {
display: none;
}
}
// Quick fix for badges in buttons
.btn .badge {
position: relative;
top: -1px;
}
// Pill badges
//
// Make them extra rounded with a modifier to replace v3's badges.
.badge-pill {
padding-right: $badge-pill-padding-x;
padding-left: $badge-pill-padding-x;
@include border-radius($badge-pill-border-radius);
}
// Colors
//
// Contextual variations (linked badges get darker on :hover).
@each $color, $value in $theme-colors {
.badge-#{$color} {
@include badge-variant($value);
}
}

View File

@@ -1,41 +0,0 @@
.breadcrumb {
display: flex;
flex-wrap: wrap;
padding: $breadcrumb-padding-y $breadcrumb-padding-x;
margin-bottom: $breadcrumb-margin-bottom;
list-style: none;
background-color: $breadcrumb-bg;
@include border-radius($breadcrumb-border-radius);
}
.breadcrumb-item {
// The separator between breadcrumbs (by default, a forward-slash: "/")
+ .breadcrumb-item {
padding-left: $breadcrumb-item-padding;
&::before {
display: inline-block; // Suppress underlining of the separator in modern browsers
padding-right: $breadcrumb-item-padding;
color: $breadcrumb-divider-color;
content: $breadcrumb-divider;
}
}
// IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built
// without `<ul>`s. The `::before` pseudo-element generates an element
// *within* the .breadcrumb-item and thereby inherits the `text-decoration`.
//
// To trick IE into suppressing the underline, we give the pseudo-element an
// underline and then immediately remove it.
+ .breadcrumb-item:hover::before {
text-decoration: underline;
}
// stylelint-disable-next-line no-duplicate-selectors
+ .breadcrumb-item:hover::before {
text-decoration: none;
}
&.active {
color: $breadcrumb-active-color;
}
}

View File

@@ -1,163 +0,0 @@
// stylelint-disable selector-no-qualifying-type
// Make the div behave like a button
.btn-group,
.btn-group-vertical {
position: relative;
display: inline-flex;
vertical-align: middle; // match .btn alignment given font-size hack above
> .btn {
position: relative;
flex: 1 1 auto;
// Bring the hover, focused, and "active" buttons to the front to overlay
// the borders properly
@include hover {
z-index: 1;
}
&:focus,
&:active,
&.active {
z-index: 1;
}
}
}
// Optional: Group multiple button groups together for a toolbar
.btn-toolbar {
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
.input-group {
width: auto;
}
}
.btn-group {
// Prevent double borders when buttons are next to each other
> .btn:not(:first-child),
> .btn-group:not(:first-child) {
margin-left: -$btn-border-width;
}
// Reset rounded corners
> .btn:not(:last-child):not(.dropdown-toggle),
> .btn-group:not(:last-child) > .btn {
@include border-right-radius(0);
}
> .btn:not(:first-child),
> .btn-group:not(:first-child) > .btn {
@include border-left-radius(0);
}
}
// Sizing
//
// Remix the default button sizing classes into new ones for easier manipulation.
.btn-group-sm > .btn { @extend .btn-sm; }
.btn-group-lg > .btn { @extend .btn-lg; }
//
// Split button dropdowns
//
.dropdown-toggle-split {
padding-right: $btn-padding-x * .75;
padding-left: $btn-padding-x * .75;
&::after,
.dropup &::after,
.dropright &::after {
margin-left: 0;
}
.dropleft &::before {
margin-right: 0;
}
}
.btn-sm + .dropdown-toggle-split {
padding-right: $btn-padding-x-sm * .75;
padding-left: $btn-padding-x-sm * .75;
}
.btn-lg + .dropdown-toggle-split {
padding-right: $btn-padding-x-lg * .75;
padding-left: $btn-padding-x-lg * .75;
}
// The clickable button for toggling the menu
// Set the same inset shadow as the :active state
.btn-group.show .dropdown-toggle {
@include box-shadow($btn-active-box-shadow);
// Show no shadow for `.btn-link` since it has no other button styles.
&.btn-link {
@include box-shadow(none);
}
}
//
// Vertical button groups
//
.btn-group-vertical {
flex-direction: column;
align-items: flex-start;
justify-content: center;
> .btn,
> .btn-group {
width: 100%;
}
> .btn:not(:first-child),
> .btn-group:not(:first-child) {
margin-top: -$btn-border-width;
}
// Reset rounded corners
> .btn:not(:last-child):not(.dropdown-toggle),
> .btn-group:not(:last-child) > .btn {
@include border-bottom-radius(0);
}
> .btn:not(:first-child),
> .btn-group:not(:first-child) > .btn {
@include border-top-radius(0);
}
}
// Checkbox and radio options
//
// In order to support the browser's form validation feedback, powered by the
// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
// `display: none;` or `visibility: hidden;` as that also hides the popover.
// Simply visually hiding the inputs via `opacity` would leave them clickable in
// certain cases which is prevented by using `clip` and `pointer-events`.
// This way, we ensure a DOM element is visible to position the popover from.
//
// See https://github.com/twbs/bootstrap/pull/12794 and
// https://github.com/twbs/bootstrap/pull/14559 for more information.
.btn-group-toggle {
> .btn,
> .btn-group > .btn {
margin-bottom: 0; // Override default `<label>` value
input[type="radio"],
input[type="checkbox"] {
position: absolute;
clip: rect(0, 0, 0, 0);
pointer-events: none;
}
}
}

View File

@@ -1,137 +0,0 @@
// stylelint-disable selector-no-qualifying-type
//
// Base styles
//
.btn {
display: inline-block;
font-family: $btn-font-family;
font-weight: $btn-font-weight;
color: $body-color;
text-align: center;
vertical-align: middle;
user-select: none;
background-color: transparent;
border: $btn-border-width solid transparent;
@include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-line-height, $btn-border-radius);
@include transition($btn-transition);
@include hover {
color: $body-color;
text-decoration: none;
}
&:focus,
&.focus {
outline: 0;
box-shadow: $btn-focus-box-shadow;
}
// Disabled comes first so active can properly restyle
&.disabled,
&:disabled {
opacity: $btn-disabled-opacity;
@include box-shadow(none);
}
&:not(:disabled):not(.disabled):active,
&:not(:disabled):not(.disabled).active {
@include box-shadow($btn-active-box-shadow);
&:focus {
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
}
}
}
// Future-proof disabling of clicks on `<a>` elements
a.btn.disabled,
fieldset:disabled a.btn {
pointer-events: none;
}
//
// Alternate buttons
//
@each $color, $value in $theme-colors {
.btn-#{$color} {
@include button-variant($value, $value);
}
}
@each $color, $value in $theme-colors {
.btn-outline-#{$color} {
@include button-outline-variant($value);
}
}
//
// Link buttons
//
// Make a button look and behave like a link
.btn-link {
font-weight: $font-weight-normal;
color: $link-color;
text-decoration: $link-decoration;
@include hover {
color: $link-hover-color;
text-decoration: $link-hover-decoration;
}
&:focus,
&.focus {
text-decoration: $link-hover-decoration;
box-shadow: none;
}
&:disabled,
&.disabled {
color: $btn-link-disabled-color;
pointer-events: none;
}
// No need for an active state here
}
//
// Button Sizes
//
.btn-lg {
@include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);
}
.btn-sm {
@include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);
}
//
// Block button
//
.btn-block {
display: block;
width: 100%;
// Vertically space out multiple block buttons
+ .btn-block {
margin-top: $btn-block-spacing-y;
}
}
// Specificity overrides
input[type="submit"],
input[type="reset"],
input[type="button"] {
&.btn-block {
width: 100%;
}
}

View File

@@ -1,289 +0,0 @@
//
// Base styles
//
.card {
position: relative;
display: flex;
flex-direction: column;
min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106
word-wrap: break-word;
background-color: $card-bg;
background-clip: border-box;
border: $card-border-width solid $card-border-color;
@include border-radius($card-border-radius);
> hr {
margin-right: 0;
margin-left: 0;
}
> .list-group:first-child {
.list-group-item:first-child {
@include border-top-radius($card-border-radius);
}
}
> .list-group:last-child {
.list-group-item:last-child {
@include border-bottom-radius($card-border-radius);
}
}
}
.card-body {
// Enable `flex-grow: 1` for decks and groups so that card blocks take up
// as much space as possible, ensuring footers are aligned to the bottom.
flex: 1 1 auto;
padding: $card-spacer-x;
color: $card-color;
}
.card-title {
margin-bottom: $card-spacer-y;
}
.card-subtitle {
margin-top: -$card-spacer-y / 2;
margin-bottom: 0;
}
.card-text:last-child {
margin-bottom: 0;
}
.card-link {
@include hover {
text-decoration: none;
}
+ .card-link {
margin-left: $card-spacer-x;
}
}
//
// Optional textual caps
//
.card-header {
padding: $card-spacer-y $card-spacer-x;
margin-bottom: 0; // Removes the default margin-bottom of <hN>
color: $card-cap-color;
background-color: $card-cap-bg;
border-bottom: $card-border-width solid $card-border-color;
&:first-child {
@include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
}
+ .list-group {
.list-group-item:first-child {
border-top: 0;
}
}
}
.card-footer {
padding: $card-spacer-y $card-spacer-x;
background-color: $card-cap-bg;
border-top: $card-border-width solid $card-border-color;
&:last-child {
@include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);
}
}
//
// Header navs
//
.card-header-tabs {
margin-right: -$card-spacer-x / 2;
margin-bottom: -$card-spacer-y;
margin-left: -$card-spacer-x / 2;
border-bottom: 0;
}
.card-header-pills {
margin-right: -$card-spacer-x / 2;
margin-left: -$card-spacer-x / 2;
}
// Card image
.card-img-overlay {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: $card-img-overlay-padding;
}
.card-img {
width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
@include border-radius($card-inner-border-radius);
}
// Card image caps
.card-img-top {
width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
@include border-top-radius($card-inner-border-radius);
}
.card-img-bottom {
width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
@include border-bottom-radius($card-inner-border-radius);
}
// Card deck
.card-deck {
display: flex;
flex-direction: column;
.card {
margin-bottom: $card-deck-margin;
}
@include media-breakpoint-up(sm) {
flex-flow: row wrap;
margin-right: -$card-deck-margin;
margin-left: -$card-deck-margin;
.card {
display: flex;
// Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
flex: 1 0 0%;
flex-direction: column;
margin-right: $card-deck-margin;
margin-bottom: 0; // Override the default
margin-left: $card-deck-margin;
}
}
}
//
// Card groups
//
.card-group {
display: flex;
flex-direction: column;
// The child selector allows nested `.card` within `.card-group`
// to display properly.
> .card {
margin-bottom: $card-group-margin;
}
@include media-breakpoint-up(sm) {
flex-flow: row wrap;
// The child selector allows nested `.card` within `.card-group`
// to display properly.
> .card {
// Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
flex: 1 0 0%;
margin-bottom: 0;
+ .card {
margin-left: 0;
border-left: 0;
}
// Handle rounded corners
@if $enable-rounded {
&:not(:last-child) {
@include border-right-radius(0);
.card-img-top,
.card-header {
// stylelint-disable-next-line property-blacklist
border-top-right-radius: 0;
}
.card-img-bottom,
.card-footer {
// stylelint-disable-next-line property-blacklist
border-bottom-right-radius: 0;
}
}
&:not(:first-child) {
@include border-left-radius(0);
.card-img-top,
.card-header {
// stylelint-disable-next-line property-blacklist
border-top-left-radius: 0;
}
.card-img-bottom,
.card-footer {
// stylelint-disable-next-line property-blacklist
border-bottom-left-radius: 0;
}
}
}
}
}
}
//
// Columns
//
.card-columns {
.card {
margin-bottom: $card-columns-margin;
}
@include media-breakpoint-up(sm) {
column-count: $card-columns-count;
column-gap: $card-columns-gap;
orphans: 1;
widows: 1;
.card {
display: inline-block; // Don't let them vertically span multiple columns
width: 100%; // Don't let their width change
}
}
}
//
// Accordion
//
.accordion {
> .card {
overflow: hidden;
&:not(:first-of-type) {
.card-header:first-child {
@include border-radius(0);
}
&:not(:last-of-type) {
border-bottom: 0;
@include border-radius(0);
}
}
&:first-of-type {
border-bottom: 0;
@include border-bottom-radius(0);
}
&:last-of-type {
@include border-top-radius(0);
}
.card-header {
margin-bottom: -$card-border-width;
}
}
}

View File

@@ -1,197 +0,0 @@
// Notes on the classes:
//
// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)
// even when their scroll action started on a carousel, but for compatibility (with Firefox)
// we're preventing all actions instead
// 2. The .carousel-item-left and .carousel-item-right is used to indicate where
// the active slide is heading.
// 3. .active.carousel-item is the current slide.
// 4. .active.carousel-item-left and .active.carousel-item-right is the current
// slide in its in-transition state. Only one of these occurs at a time.
// 5. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right
// is the upcoming slide in transition.
.carousel {
position: relative;
}
.carousel.pointer-event {
touch-action: pan-y;
}
.carousel-inner {
position: relative;
width: 100%;
overflow: hidden;
@include clearfix();
}
.carousel-item {
position: relative;
display: none;
float: left;
width: 100%;
margin-right: -100%;
backface-visibility: hidden;
@include transition($carousel-transition);
}
.carousel-item.active,
.carousel-item-next,
.carousel-item-prev {
display: block;
}
.carousel-item-next:not(.carousel-item-left),
.active.carousel-item-right {
transform: translateX(100%);
}
.carousel-item-prev:not(.carousel-item-right),
.active.carousel-item-left {
transform: translateX(-100%);
}
//
// Alternate transitions
//
.carousel-fade {
.carousel-item {
opacity: 0;
transition-property: opacity;
transform: none;
}
.carousel-item.active,
.carousel-item-next.carousel-item-left,
.carousel-item-prev.carousel-item-right {
z-index: 1;
opacity: 1;
}
.active.carousel-item-left,
.active.carousel-item-right {
z-index: 0;
opacity: 0;
@include transition(0s $carousel-transition-duration opacity);
}
}
//
// Left/right controls for nav
//
.carousel-control-prev,
.carousel-control-next {
position: absolute;
top: 0;
bottom: 0;
z-index: 1;
// Use flex for alignment (1-3)
display: flex; // 1. allow flex styles
align-items: center; // 2. vertically center contents
justify-content: center; // 3. horizontally center contents
width: $carousel-control-width;
color: $carousel-control-color;
text-align: center;
opacity: $carousel-control-opacity;
@include transition($carousel-control-transition);
// Hover/focus state
@include hover-focus {
color: $carousel-control-color;
text-decoration: none;
outline: 0;
opacity: $carousel-control-hover-opacity;
}
}
.carousel-control-prev {
left: 0;
@if $enable-gradients {
background: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
}
}
.carousel-control-next {
right: 0;
@if $enable-gradients {
background: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
}
}
// Icons for within
.carousel-control-prev-icon,
.carousel-control-next-icon {
display: inline-block;
width: $carousel-control-icon-width;
height: $carousel-control-icon-width;
background: no-repeat 50% / 100% 100%;
}
.carousel-control-prev-icon {
background-image: $carousel-control-prev-icon-bg;
}
.carousel-control-next-icon {
background-image: $carousel-control-next-icon-bg;
}
// Optional indicator pips
//
// Add an ordered list with the following class and add a list item for each
// slide your carousel holds.
.carousel-indicators {
position: absolute;
right: 0;
bottom: 0;
left: 0;
z-index: 15;
display: flex;
justify-content: center;
padding-left: 0; // override <ol> default
// Use the .carousel-control's width as margin so we don't overlay those
margin-right: $carousel-control-width;
margin-left: $carousel-control-width;
list-style: none;
li {
box-sizing: content-box;
flex: 0 1 auto;
width: $carousel-indicator-width;
height: $carousel-indicator-height;
margin-right: $carousel-indicator-spacer;
margin-left: $carousel-indicator-spacer;
text-indent: -999px;
cursor: pointer;
background-color: $carousel-indicator-active-bg;
background-clip: padding-box;
// Use transparent borders to increase the hit area by 10px on top and bottom.
border-top: $carousel-indicator-hit-area-height solid transparent;
border-bottom: $carousel-indicator-hit-area-height solid transparent;
opacity: .5;
@include transition($carousel-indicator-transition);
}
.active {
opacity: 1;
}
}
// Optional captions
//
//
.carousel-caption {
position: absolute;
right: (100% - $carousel-caption-width) / 2;
bottom: 20px;
left: (100% - $carousel-caption-width) / 2;
z-index: 10;
padding-top: 20px;
padding-bottom: 20px;
color: $carousel-caption-color;
text-align: center;
}

View File

@@ -1,41 +0,0 @@
.close {
float: right;
@include font-size($close-font-size);
font-weight: $close-font-weight;
line-height: 1;
color: $close-color;
text-shadow: $close-text-shadow;
opacity: .5;
// Override <a>'s hover style
@include hover {
color: $close-color;
text-decoration: none;
}
&:not(:disabled):not(.disabled) {
@include hover-focus {
opacity: .75;
}
}
}
// Additional properties for button version
// iOS requires the button element instead of an anchor tag.
// If you want the anchor version, it requires `href="#"`.
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
// stylelint-disable-next-line selector-no-qualifying-type
button.close {
padding: 0;
background-color: transparent;
border: 0;
appearance: none;
}
// Future-proof disabling of clicks on `<a>` elements
// stylelint-disable-next-line selector-no-qualifying-type
a.close.disabled {
pointer-events: none;
}

View File

@@ -1,48 +0,0 @@
// Inline code
code {
@include font-size($code-font-size);
color: $code-color;
word-break: break-word;
// Streamline the style when inside anchors to avoid broken underline and more
a > & {
color: inherit;
}
}
// User input typically entered via keyboard
kbd {
padding: $kbd-padding-y $kbd-padding-x;
@include font-size($kbd-font-size);
color: $kbd-color;
background-color: $kbd-bg;
@include border-radius($border-radius-sm);
@include box-shadow($kbd-box-shadow);
kbd {
padding: 0;
@include font-size(100%);
font-weight: $nested-kbd-font-weight;
@include box-shadow(none);
}
}
// Blocks of code
pre {
display: block;
@include font-size($code-font-size);
color: $pre-color;
// Account for some code outputs that place code tags in pre tags
code {
@include font-size(inherit);
color: inherit;
word-break: normal;
}
}
// Enable scrollable blocks of code
.pre-scrollable {
max-height: $pre-scrollable-max-height;
overflow-y: scroll;
}

View File

@@ -1,507 +0,0 @@
// Embedded icons from Open Iconic.
// Released under MIT and copyright 2014 Waybury.
// https://useiconic.com/open
// Checkboxes and radios
//
// Base class takes care of all the key behavioral aspects.
.custom-control {
position: relative;
display: block;
min-height: $font-size-base * $line-height-base;
padding-left: $custom-control-gutter + $custom-control-indicator-size;
}
.custom-control-inline {
display: inline-flex;
margin-right: $custom-control-spacer-x;
}
.custom-control-input {
position: absolute;
z-index: -1; // Put the input behind the label so it doesn't overlay text
opacity: 0;
&:checked ~ .custom-control-label::before {
color: $custom-control-indicator-checked-color;
border-color: $custom-control-indicator-checked-border-color;
@include gradient-bg($custom-control-indicator-checked-bg);
@include box-shadow($custom-control-indicator-checked-box-shadow);
}
&:focus ~ .custom-control-label::before {
// the mixin is not used here to make sure there is feedback
@if $enable-shadows {
box-shadow: $input-box-shadow, $input-focus-box-shadow;
} @else {
box-shadow: $custom-control-indicator-focus-box-shadow;
}
}
&:focus:not(:checked) ~ .custom-control-label::before {
border-color: $custom-control-indicator-focus-border-color;
}
&:not(:disabled):active ~ .custom-control-label::before {
color: $custom-control-indicator-active-color;
background-color: $custom-control-indicator-active-bg;
border-color: $custom-control-indicator-active-border-color;
@include box-shadow($custom-control-indicator-active-box-shadow);
}
&:disabled {
~ .custom-control-label {
color: $custom-control-label-disabled-color;
&::before {
background-color: $custom-control-indicator-disabled-bg;
}
}
}
}
// Custom control indicators
//
// Build the custom controls out of pseudo-elements.
.custom-control-label {
position: relative;
margin-bottom: 0;
vertical-align: top;
// Background-color and (when enabled) gradient
&::before {
position: absolute;
top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;
left: -($custom-control-gutter + $custom-control-indicator-size);
display: block;
width: $custom-control-indicator-size;
height: $custom-control-indicator-size;
pointer-events: none;
content: "";
background-color: $custom-control-indicator-bg;
border: $custom-control-indicator-border-color solid $custom-control-indicator-border-width;
@include box-shadow($custom-control-indicator-box-shadow);
}
// Foreground (icon)
&::after {
position: absolute;
top: ($font-size-base * $line-height-base - $custom-control-indicator-size) / 2;
left: -($custom-control-gutter + $custom-control-indicator-size);
display: block;
width: $custom-control-indicator-size;
height: $custom-control-indicator-size;
content: "";
background: no-repeat 50% / #{$custom-control-indicator-bg-size};
}
}
// Checkboxes
//
// Tweak just a few things for checkboxes.
.custom-checkbox {
.custom-control-label::before {
@include border-radius($custom-checkbox-indicator-border-radius);
}
.custom-control-input:checked ~ .custom-control-label {
&::after {
background-image: $custom-checkbox-indicator-icon-checked;
}
}
.custom-control-input:indeterminate ~ .custom-control-label {
&::before {
border-color: $custom-checkbox-indicator-indeterminate-border-color;
@include gradient-bg($custom-checkbox-indicator-indeterminate-bg);
@include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);
}
&::after {
background-image: $custom-checkbox-indicator-icon-indeterminate;
}
}
.custom-control-input:disabled {
&:checked ~ .custom-control-label::before {
background-color: $custom-control-indicator-checked-disabled-bg;
}
&:indeterminate ~ .custom-control-label::before {
background-color: $custom-control-indicator-checked-disabled-bg;
}
}
}
// Radios
//
// Tweak just a few things for radios.
.custom-radio {
.custom-control-label::before {
// stylelint-disable-next-line property-blacklist
border-radius: $custom-radio-indicator-border-radius;
}
.custom-control-input:checked ~ .custom-control-label {
&::after {
background-image: $custom-radio-indicator-icon-checked;
}
}
.custom-control-input:disabled {
&:checked ~ .custom-control-label::before {
background-color: $custom-control-indicator-checked-disabled-bg;
}
}
}
// switches
//
// Tweak a few things for switches
.custom-switch {
padding-left: $custom-switch-width + $custom-control-gutter;
.custom-control-label {
&::before {
left: -($custom-switch-width + $custom-control-gutter);
width: $custom-switch-width;
pointer-events: all;
// stylelint-disable-next-line property-blacklist
border-radius: $custom-switch-indicator-border-radius;
}
&::after {
top: calc(#{(($font-size-base * $line-height-base - $custom-control-indicator-size) / 2)} + #{$custom-control-indicator-border-width * 2});
left: calc(#{-($custom-switch-width + $custom-control-gutter)} + #{$custom-control-indicator-border-width * 2});
width: $custom-switch-indicator-size;
height: $custom-switch-indicator-size;
background-color: $custom-control-indicator-border-color;
// stylelint-disable-next-line property-blacklist
border-radius: $custom-switch-indicator-border-radius;
@include transition(transform .15s ease-in-out, $custom-forms-transition);
}
}
.custom-control-input:checked ~ .custom-control-label {
&::after {
background-color: $custom-control-indicator-bg;
transform: translateX($custom-switch-width - $custom-control-indicator-size);
}
}
.custom-control-input:disabled {
&:checked ~ .custom-control-label::before {
background-color: $custom-control-indicator-checked-disabled-bg;
}
}
}
// Select
//
// Replaces the browser default select with a custom one, mostly pulled from
// https://primer.github.io/.
//
.custom-select {
display: inline-block;
width: 100%;
height: $custom-select-height;
padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;
font-family: $custom-select-font-family;
@include font-size($custom-select-font-size);
font-weight: $custom-select-font-weight;
line-height: $custom-select-line-height;
color: $custom-select-color;
vertical-align: middle;
background: $custom-select-background;
background-color: $custom-select-bg;
border: $custom-select-border-width solid $custom-select-border-color;
@include border-radius($custom-select-border-radius, 0);
@include box-shadow($custom-select-box-shadow);
appearance: none;
&:focus {
border-color: $custom-select-focus-border-color;
outline: 0;
@if $enable-shadows {
box-shadow: $custom-select-box-shadow, $custom-select-focus-box-shadow;
} @else {
box-shadow: $custom-select-focus-box-shadow;
}
&::-ms-value {
// For visual consistency with other platforms/browsers,
// suppress the default white text on blue background highlight given to
// the selected option text when the (still closed) <select> receives focus
// in IE and (under certain conditions) Edge.
// See https://github.com/twbs/bootstrap/issues/19398.
color: $input-color;
background-color: $input-bg;
}
}
&[multiple],
&[size]:not([size="1"]) {
height: auto;
padding-right: $custom-select-padding-x;
background-image: none;
}
&:disabled {
color: $custom-select-disabled-color;
background-color: $custom-select-disabled-bg;
}
// Hides the default caret in IE11
&::-ms-expand {
display: none;
}
}
.custom-select-sm {
height: $custom-select-height-sm;
padding-top: $custom-select-padding-y-sm;
padding-bottom: $custom-select-padding-y-sm;
padding-left: $custom-select-padding-x-sm;
@include font-size($custom-select-font-size-sm);
}
.custom-select-lg {
height: $custom-select-height-lg;
padding-top: $custom-select-padding-y-lg;
padding-bottom: $custom-select-padding-y-lg;
padding-left: $custom-select-padding-x-lg;
@include font-size($custom-select-font-size-lg);
}
// File
//
// Custom file input.
.custom-file {
position: relative;
display: inline-block;
width: 100%;
height: $custom-file-height;
margin-bottom: 0;
}
.custom-file-input {
position: relative;
z-index: 2;
width: 100%;
height: $custom-file-height;
margin: 0;
opacity: 0;
&:focus ~ .custom-file-label {
border-color: $custom-file-focus-border-color;
box-shadow: $custom-file-focus-box-shadow;
}
&:disabled ~ .custom-file-label {
background-color: $custom-file-disabled-bg;
}
@each $lang, $value in $custom-file-text {
&:lang(#{$lang}) ~ .custom-file-label::after {
content: $value;
}
}
~ .custom-file-label[data-browse]::after {
content: attr(data-browse);
}
}
.custom-file-label {
position: absolute;
top: 0;
right: 0;
left: 0;
z-index: 1;
height: $custom-file-height;
padding: $custom-file-padding-y $custom-file-padding-x;
font-family: $custom-file-font-family;
font-weight: $custom-file-font-weight;
line-height: $custom-file-line-height;
color: $custom-file-color;
background-color: $custom-file-bg;
border: $custom-file-border-width solid $custom-file-border-color;
@include border-radius($custom-file-border-radius);
@include box-shadow($custom-file-box-shadow);
&::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
z-index: 3;
display: block;
height: $custom-file-height-inner;
padding: $custom-file-padding-y $custom-file-padding-x;
line-height: $custom-file-line-height;
color: $custom-file-button-color;
content: "Browse";
@include gradient-bg($custom-file-button-bg);
border-left: inherit;
@include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);
}
}
// Range
//
// Style range inputs the same across browsers. Vendor-specific rules for pseudo
// elements cannot be mixed. As such, there are no shared styles for focus or
// active states on prefixed selectors.
.custom-range {
width: 100%;
height: calc(#{$custom-range-thumb-height} + #{$custom-range-thumb-focus-box-shadow-width * 2});
padding: 0; // Need to reset padding
background-color: transparent;
appearance: none;
&:focus {
outline: none;
// Pseudo-elements must be split across multiple rulesets to have an effect.
// No box-shadow() mixin for focus accessibility.
&::-webkit-slider-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }
&::-moz-range-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }
&::-ms-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }
}
&::-moz-focus-outer {
border: 0;
}
&::-webkit-slider-thumb {
width: $custom-range-thumb-width;
height: $custom-range-thumb-height;
margin-top: ($custom-range-track-height - $custom-range-thumb-height) / 2; // Webkit specific
@include gradient-bg($custom-range-thumb-bg);
border: $custom-range-thumb-border;
@include border-radius($custom-range-thumb-border-radius);
@include box-shadow($custom-range-thumb-box-shadow);
@include transition($custom-forms-transition);
appearance: none;
&:active {
@include gradient-bg($custom-range-thumb-active-bg);
}
}
&::-webkit-slider-runnable-track {
width: $custom-range-track-width;
height: $custom-range-track-height;
color: transparent; // Why?
cursor: $custom-range-track-cursor;
background-color: $custom-range-track-bg;
border-color: transparent;
@include border-radius($custom-range-track-border-radius);
@include box-shadow($custom-range-track-box-shadow);
}
&::-moz-range-thumb {
width: $custom-range-thumb-width;
height: $custom-range-thumb-height;
@include gradient-bg($custom-range-thumb-bg);
border: $custom-range-thumb-border;
@include border-radius($custom-range-thumb-border-radius);
@include box-shadow($custom-range-thumb-box-shadow);
@include transition($custom-forms-transition);
appearance: none;
&:active {
@include gradient-bg($custom-range-thumb-active-bg);
}
}
&::-moz-range-track {
width: $custom-range-track-width;
height: $custom-range-track-height;
color: transparent;
cursor: $custom-range-track-cursor;
background-color: $custom-range-track-bg;
border-color: transparent; // Firefox specific?
@include border-radius($custom-range-track-border-radius);
@include box-shadow($custom-range-track-box-shadow);
}
&::-ms-thumb {
width: $custom-range-thumb-width;
height: $custom-range-thumb-height;
margin-top: 0; // Edge specific
margin-right: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.
margin-left: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.
@include gradient-bg($custom-range-thumb-bg);
border: $custom-range-thumb-border;
@include border-radius($custom-range-thumb-border-radius);
@include box-shadow($custom-range-thumb-box-shadow);
@include transition($custom-forms-transition);
appearance: none;
&:active {
@include gradient-bg($custom-range-thumb-active-bg);
}
}
&::-ms-track {
width: $custom-range-track-width;
height: $custom-range-track-height;
color: transparent;
cursor: $custom-range-track-cursor;
background-color: transparent;
border-color: transparent;
border-width: $custom-range-thumb-height / 2;
@include box-shadow($custom-range-track-box-shadow);
}
&::-ms-fill-lower {
background-color: $custom-range-track-bg;
@include border-radius($custom-range-track-border-radius);
}
&::-ms-fill-upper {
margin-right: 15px; // arbitrary?
background-color: $custom-range-track-bg;
@include border-radius($custom-range-track-border-radius);
}
&:disabled {
&::-webkit-slider-thumb {
background-color: $custom-range-thumb-disabled-bg;
}
&::-webkit-slider-runnable-track {
cursor: default;
}
&::-moz-range-thumb {
background-color: $custom-range-thumb-disabled-bg;
}
&::-moz-range-track {
cursor: default;
}
&::-ms-thumb {
background-color: $custom-range-thumb-disabled-bg;
}
}
}
.custom-control-label::before,
.custom-file-label,
.custom-select {
@include transition($custom-forms-transition);
}

View File

@@ -1,191 +0,0 @@
// The dropdown wrapper (`<div>`)
.dropup,
.dropright,
.dropdown,
.dropleft {
position: relative;
}
.dropdown-toggle {
white-space: nowrap;
// Generate the caret automatically
@include caret;
}
// The dropdown menu
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: $zindex-dropdown;
display: none; // none by default, but block on "open" of the menu
float: left;
min-width: $dropdown-min-width;
padding: $dropdown-padding-y 0;
margin: $dropdown-spacer 0 0; // override default ul
@include font-size($dropdown-font-size);
color: $dropdown-color;
text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
list-style: none;
background-color: $dropdown-bg;
background-clip: padding-box;
border: $dropdown-border-width solid $dropdown-border-color;
@include border-radius($dropdown-border-radius);
@include box-shadow($dropdown-box-shadow);
}
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.dropdown-menu#{$infix}-left {
right: auto;
left: 0;
}
.dropdown-menu#{$infix}-right {
right: 0;
left: auto;
}
}
}
// Allow for dropdowns to go bottom up (aka, dropup-menu)
// Just add .dropup after the standard .dropdown class and you're set.
.dropup {
.dropdown-menu {
top: auto;
bottom: 100%;
margin-top: 0;
margin-bottom: $dropdown-spacer;
}
.dropdown-toggle {
@include caret(up);
}
}
.dropright {
.dropdown-menu {
top: 0;
right: auto;
left: 100%;
margin-top: 0;
margin-left: $dropdown-spacer;
}
.dropdown-toggle {
@include caret(right);
&::after {
vertical-align: 0;
}
}
}
.dropleft {
.dropdown-menu {
top: 0;
right: 100%;
left: auto;
margin-top: 0;
margin-right: $dropdown-spacer;
}
.dropdown-toggle {
@include caret(left);
&::before {
vertical-align: 0;
}
}
}
// When enabled Popper.js, reset basic dropdown position
// stylelint-disable-next-line no-duplicate-selectors
.dropdown-menu {
&[x-placement^="top"],
&[x-placement^="right"],
&[x-placement^="bottom"],
&[x-placement^="left"] {
right: auto;
bottom: auto;
}
}
// Dividers (basically an `<hr>`) within the dropdown
.dropdown-divider {
@include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y);
}
// Links, buttons, and more within the dropdown menu
//
// `<button>`-specific styles are denoted with `// For <button>s`
.dropdown-item {
display: block;
width: 100%; // For `<button>`s
padding: $dropdown-item-padding-y $dropdown-item-padding-x;
clear: both;
font-weight: $font-weight-normal;
color: $dropdown-link-color;
text-align: inherit; // For `<button>`s
white-space: nowrap; // prevent links from randomly breaking onto new lines
background-color: transparent; // For `<button>`s
border: 0; // For `<button>`s
// Prevent dropdown overflow if there's no padding
// See https://github.com/twbs/bootstrap/pull/27703
@if $dropdown-padding-y == 0 {
&:first-child {
@include border-top-radius($dropdown-inner-border-radius);
}
&:last-child {
@include border-bottom-radius($dropdown-inner-border-radius);
}
}
@include hover-focus {
color: $dropdown-link-hover-color;
text-decoration: none;
@include gradient-bg($dropdown-link-hover-bg);
}
&.active,
&:active {
color: $dropdown-link-active-color;
text-decoration: none;
@include gradient-bg($dropdown-link-active-bg);
}
&.disabled,
&:disabled {
color: $dropdown-link-disabled-color;
pointer-events: none;
background-color: transparent;
// Remove CSS gradients if they're enabled
@if $enable-gradients {
background-image: none;
}
}
}
.dropdown-menu.show {
display: block;
}
// Dropdown section headers
.dropdown-header {
display: block;
padding: $dropdown-padding-y $dropdown-item-padding-x;
margin-bottom: 0; // for use with heading elements
@include font-size($font-size-sm);
color: $dropdown-header-color;
white-space: nowrap; // as with > li > a
}
// Dropdown text
.dropdown-item-text {
display: block;
padding: $dropdown-item-padding-y $dropdown-item-padding-x;
color: $dropdown-link-color;
}

Some files were not shown because too many files have changed in this diff Show More