| 74 | | begin; |
| 75 | | |
| 76 | | insert into komisii (im_id, ri_id) values (3, 1) returning kom_id; |
| 77 | | |
| 78 | | |
| 79 | | insert into clenovi_na_komisija (g_id) values (20); |
| 80 | | insert into clenovi_na_komisija (g_id) values (21); |
| 81 | | insert into clenovi_na_komisija (g_id) values (22); |
| 82 | | insert into clenovi_na_komisija (g_id) values (23); |
| 83 | | insert into clenovi_na_komisija (g_id) values (24); |
| 84 | | |
| 85 | | COMMIT; |
| | 74 | DO $$ |
| | 75 | DECLARE |
| | 76 | new_kom_id BIGINT; |
| | 77 | BEGIN |
| | 78 | INSERT INTO komisii (im_id, ri_id) VALUES (1, 1) |
| | 79 | RETURNING kom_id INTO new_kom_id; |
| | 80 | |
| | 81 | INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (20, new_kom_id); |
| | 82 | INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (21, new_kom_id); |
| | 83 | INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (22, new_kom_id); |
| | 84 | INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (23, new_kom_id); |
| | 85 | INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (24, new_kom_id); |
| | 86 | |
| | 87 | COMMIT; |
| | 88 | END $$; |
| | 90 | == Доделува идентификациски код за гласање со физичко присуство |
| | 91 | Корисниците со улога членови на комисија, можат да се најават на системот и пристапат на адресата /admin/electionRealizationInterface, при што добиваат преглед на избирачкиот список од реализацијата којашто се одржува на деновите на најава, за гласачкото место во кое се одговорни. Дополнително, на крајот на редот достапна е акцијата „Гласај“ со што можат да генерираат идентификациски код за гласање доколку гласачот сака да го оствари правото на глас со физичко присуство. Контролерот кој ја опслужува оваа акција е следен: |
| | 92 | {{{#!java |
| | 93 | @GetMapping("/admin/electionRealizationInterface") |
| | 94 | public String showElectionRealization(Model m, Principal p, Authentication authentication) { |
| | 95 | UserProfile userProfile = (UserProfile) authentication.getPrincipal(); |
| | 96 | m.addAttribute("realization", committeeService.findElectionRealizationByCitizen(userProfile.getCitizen().getId())); |
| | 97 | m.addAttribute("citizens", committeeService.getCitizens(userProfile.getCitizen().getId())); |
| | 98 | m.addAttribute("replaceTemplate","election_realization_interface"); |
| | 99 | return "index"; |
| | 100 | } |
| | 101 | }}} |
| | 102 | За да се избегнат било какви манипулации и приказ на информации кои не треба да се достапни за најавениот корисник, неговиот идентитет се утврдува директно на серверска страна, од најавениот корисник. Дополнително во сервисите се процесираат реализацијата и избирачкиот список кој треба да го гледа корисникот. |
| | 103 | {{{#!java |
| | 104 | @Override |
| | 105 | public List<Citizen> getCitizens(Long committeeId) { |
| | 106 | CommitteeMember committeeMember = committeeMemberRepository.findById(committeeId).orElseThrow(RuntimeException::new); |
| | 107 | Committee committee = committeeRepository.findCommitteeByMembersContainsAndElectionRealization_DateIsAfter(committeeMember, LocalDate.now().minusDays(1)); |
| | 108 | PollingStation pollingStation = committee.getPollingStation(); |
| | 109 | return citizenRepository.findAllByAddress_PollingStation(pollingStation.getId()).stream().filter(x -> x instanceof Citizen).toList(); |
| | 110 | } |
| | 111 | }}} |
| | 112 | Во committeeService-от се пронаѓа членот на комисија кој го претставува корисничкиот профил, комисијата во која е член, како и избирачкиот список за гласачкото местоо за кое е одговорна. Во |
| | 113 | програмската имплементација, ова се прави со повик на соодветни методи од Spring Data JPA, а во SQL би изгледало вака: |
| | 114 | {{{#!sql |
| | 115 | select * |
| | 116 | from komisii k |
| | 117 | join se_clenovi_na ck on k.kom_id = ck.kom_id |
| | 118 | join realizacii_na_izbori ri on ri.ri_id = k.ri_id |
| | 119 | where ck.g_id = 1 and ri.ri_id = 1 and ri.ri_datum = CURRENT_DATE |
| | 120 | limit 1 |
| | 121 | }}} |