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 | }}} |