Skip to content

Commit

Permalink
Potreban merge zbog mikroservisa (#99)
Browse files Browse the repository at this point in the history
* popravljen model

* popravljen model

* dodat id za kontnu grupu

* implementiran model za zaposlenog i platu

* popravka modela

* ispravka greski prilikom kucanja

* Uradjen Crud zaposleni.

* Bug fix..

* CRUD Plata (#81)

* popravljen model

* wip

* wip

* zavrsen crud za platu

* vraceno ime user tabele na default

* sklonjena dupla anotacija

* popravljena put ruta da se slaze sa ostatkom api-ja

* ispravljene sonar greske

* napisan test i prebaceno pravljenje plate u servis

Co-authored-by: ncvetinovic7619rn <[email protected]>
Co-authored-by: Milutin Milicevic <[email protected]>

* Premestena logika za otkazZaposlenog iz kontrolera u zaposleniService, i uradjene sitne izmene.

* Dodati exceptioni u ZaposleniController.

* Dovrsen staz u createZaposleni.

* Dodate relacije

* Dodate relacije za StatusZaposlenog i RadnaPozicija

* Dodata ruta za dohvatanje svih plata

* Filtriranje po atributu iz druge tabele koja nije primarni kljuc

* CRUD koeficijent (#73)

* #6 get sume - Controller metoda i service metode za sumiranje.

* merge

* @gojkovicmatija99 komentari ispravke i sonar ispravke

* #19 CRUD kontne grupe

* #19 sonar izmene

* #19 ispravke

* #19 - refaktorisanje posle promene modela

* #19 - ispravke

* #19 @mstosic99 komentari ispravke

* #58 CRUD koeficijent

* #58 ispravke

* Update popravka

* Kontne grupe popravka

* Kontne grupe popravka

* Zaposleni POST fix

* Zaposleni bug fix1 (#93)

* Popravljen update zaposleni.

* Delete zaposleni.

* Sredjen delte zaposleni.

* Zavrseno CRUD zaposlen.

* Fix za update plate

* Fix za glavnu knjigu

* Reverted updateDatumDoNaStarojPlati

* Dodat komentar

Co-authored-by: ncvetinovic7619rn <[email protected]>
Co-authored-by: Luka Mitrovic <[email protected]>
Co-authored-by: Marec99 <[email protected]>
Co-authored-by: Bagelax <[email protected]>
Co-authored-by: Milutin Milicevic <[email protected]>
Co-authored-by: Aleksa Dačić <[email protected]>
Co-authored-by: Marko Radisic <[email protected]>
  • Loading branch information
8 people authored Apr 9, 2022
1 parent b23c9c1 commit 72f80ac
Show file tree
Hide file tree
Showing 32 changed files with 1,116 additions and 14 deletions.
65 changes: 62 additions & 3 deletions src/main/java/rs/raf/demo/bootstrap/BootstrapData.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package rs.raf.demo.bootstrap;

import net.bytebuddy.utility.RandomString;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import rs.raf.demo.model.*;
import rs.raf.demo.model.enums.PolZaposlenog;
import rs.raf.demo.model.enums.RadnaPozicija;
import rs.raf.demo.model.enums.StatusZaposlenog;
import rs.raf.demo.model.enums.TipDokumenta;
import rs.raf.demo.model.enums.TipFakture;
import rs.raf.demo.repositories.*;
import rs.raf.demo.responses.KnjizenjeResponse;

import java.util.*;

Expand All @@ -27,6 +28,10 @@ public class BootstrapData implements CommandLineRunner {
private final KontnaGrupaRepository kontnaGrupaRepository;
private final KontoRepository kontoRepository;
private final KnjizenjeRepository knjizenjeRepository;
private final ZaposleniRepository zaposleniRepository;
private final StazRepository stazRepository;
private final PlataRepository plataRepository;
private final KoeficijentRepository koeficijentRepository;

@Autowired
public BootstrapData(UserRepository userRepository,
Expand All @@ -36,7 +41,11 @@ public BootstrapData(UserRepository userRepository,
KontoRepository kontoRepository,
KontnaGrupaRepository kontnaGrupaRepository,
KnjizenjeRepository knjizenjeRepository,
PreduzeceRepository preduzeceRepository) {
PreduzeceRepository preduzeceRepository,
ZaposleniRepository zaposleniRepository,
StazRepository stazRepository,
PlataRepository plataRepository,
KoeficijentRepository koeficijentRepository) {
this.userRepository = userRepository;
this.permissionRepository = permissionRepository;
this.fakturaRepository = fakturaRepository;
Expand All @@ -45,6 +54,10 @@ public BootstrapData(UserRepository userRepository,
this.kontoRepository = kontoRepository;
this.knjizenjeRepository = knjizenjeRepository;
this.kontnaGrupaRepository = kontnaGrupaRepository;
this.zaposleniRepository = zaposleniRepository;
this.stazRepository = stazRepository;
this.plataRepository = plataRepository;
this.koeficijentRepository = koeficijentRepository;
}

private Preduzece getDefaultPreduzece(){
Expand Down Expand Up @@ -192,15 +205,21 @@ public void run(String... args) throws Exception {
Konto konto1 = new Konto();
konto1.setDuguje(1000.0);
konto1.setPotrazuje(500.0);
konto1.setKnjizenje(knj1);
konto1.setKontnaGrupa(kg1);
konto1 = kontoRepository.save(konto1);

Konto konto2 = new Konto();
konto2.setDuguje(2000.0);
konto2.setKnjizenje(knj1);
konto2.setKontnaGrupa(kg1);
konto2.setPotrazuje(1000.0);
kontoRepository.save(konto2);

Konto konto3 = new Konto();
konto3.setDuguje(0.0);
konto3.setKnjizenje(knj1);
konto3.setKontnaGrupa(kg1);
konto3.setPotrazuje(1000.0);
kontoRepository.save(konto3);

Expand All @@ -217,6 +236,46 @@ public void run(String... args) throws Exception {
konto3.setKnjizenje(knjizenje);
kontoRepository.save(konto1);

Staz staz = new Staz();
staz.setPocetakRada(new Date());
staz.setKrajRada(null);
stazRepository.save(staz);

List<Staz> stazevi = new ArrayList<>();
stazevi.add(staz);

Zaposleni zaposleni = new Zaposleni();
zaposleni.setIme("Marko");
zaposleni.setPrezime("Markovic");
zaposleni.setPocetakRadnogOdnosa(new Date());
zaposleni.setJmbg("1234567890123");
zaposleni.setPol(PolZaposlenog.MUSKO);
zaposleni.setStatusZaposlenog(StatusZaposlenog.ZAPOSLEN);
zaposleni.setDatumRodjenja(new Date());
zaposleni.setRadnaPozicija(RadnaPozicija.DIREKTOR);
zaposleni.setStaz(stazevi);
zaposleniRepository.save(zaposleni);

Plata plata = new Plata();
plata.setNetoPlata(100000.0);
plata.setZaposleni(zaposleni);
plata.setDatumOd(new Date());
plata.setDatumDo(null);
plataRepository.save(plata);

Koeficijent koeficijent = new Koeficijent();
koeficijent.setKoeficijentPoreza(1d);
koeficijent.setNezaposlenost1(2d);
koeficijent.setNezaposlenost2(10d);
koeficijent.setPenzionoOsiguranje1(5d);
koeficijent.setPenzionoOsiguranje2(50d);
koeficijent.setNajnizaOsnovica(1d);
koeficijent.setNajvisaOsnovica(1d);
koeficijent.setZdravstvenoOsiguranje1(5d);
koeficijent.setZdravstvenoOsiguranje2(5d);
koeficijent.setPoreskoOslobadjanje(23.4);
koeficijentRepository.save(koeficijent);

log.info("Data loaded!");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,21 @@ public GlavnaKnjigaController(KontoService kontoService) {
this.searchUtil = new SearchUtil<>();
}

@GetMapping(value = "/{kontnaGrupa}",
produces = MediaType.APPLICATION_JSON_VALUE)
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getPreduzeceById(
@PathVariable("kontnaGrupa") String kontnaGrupa,
@RequestParam(name = "search", required = false, defaultValue = "") String search,
@RequestParam(defaultValue = ApiUtil.DEFAULT_PAGE) @Min(ApiUtil.MIN_PAGE) Integer page,
@RequestParam(defaultValue = ApiUtil.DEFAULT_SIZE) @Min(ApiUtil.MIN_SIZE) @Max(ApiUtil.MAX_SIZE) Integer size,
@RequestParam(defaultValue = "kontoId") String[] sort
) {
Pageable pageSort = ApiUtil.resolveSortingAndPagination(page, size, sort);
if (search.length() > 0) search += ",";
Specification<Konto> spec = this.searchUtil.getSpec(search + "kontnaGrupa:" + kontnaGrupa + ",");
return ResponseEntity.ok(this.kontoService.findAllGlavnaKnjigaResponse(spec, pageSort));
Specification<Konto> spec = this.searchUtil.getSpec(search);
return ResponseEntity.ok(this.kontoService.findAllGlavnaKnjigaResponseWithFilter(spec, pageSort));
}

@GetMapping(value = "/all",
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getAll() {
return ResponseEntity.ok(this.kontoService.findAllGlavnaKnjigaResponse());
}
}
40 changes: 40 additions & 0 deletions src/main/java/rs/raf/demo/controllers/KoeficijentController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package rs.raf.demo.controllers;

import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import rs.raf.demo.model.Koeficijent;
import rs.raf.demo.services.IService;
import rs.raf.demo.services.impl.KoeficijentService;

import javax.persistence.EntityNotFoundException;

@CrossOrigin
@RestController
@SecurityRequirement(name = "bearerAuth")
@RequestMapping("/api/koeficijenti")
public class KoeficijentController {
private final IService<Koeficijent, Long> koeficijentService;

public KoeficijentController(KoeficijentService koeficijentService) {
this.koeficijentService = koeficijentService;
}

@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> findAll() {
return ResponseEntity.ok(koeficijentService.findAll());
}

@PutMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> update(@RequestBody Koeficijent koeficijent) {
if (koeficijentService.findById(koeficijent.getKoeficijentId()).isPresent())
return ResponseEntity.ok(koeficijentService.save(koeficijent));
throw new EntityNotFoundException();
}

@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> create(@RequestBody Koeficijent koeficijent) {
return ResponseEntity.ok(koeficijentService.save(koeficijent));
}
}
85 changes: 85 additions & 0 deletions src/main/java/rs/raf/demo/controllers/PlataRestController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package rs.raf.demo.controllers;

import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import rs.raf.demo.model.Plata;
import rs.raf.demo.requests.PlataRequest;
import rs.raf.demo.services.impl.PlataService;
import rs.raf.demo.utils.SearchUtil;

import javax.persistence.EntityNotFoundException;
import javax.validation.Valid;
import java.util.Optional;

@CrossOrigin
@RestController
@SecurityRequirement(name = "bearerAuth")
@RequestMapping("/api")
public class PlataRestController {
private final PlataService plataService;
private final SearchUtil<Plata> searchUtil;

public PlataRestController(PlataService plataService) {
this.plataService = plataService;
this.searchUtil = new SearchUtil<>();
}

@GetMapping(value = "/zaposleni/{id}/plata", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getPlataForZaposleni(@PathVariable("id") Long zaposleniId) {
return ResponseEntity.ok(this.plataService.findByZaposleniZaposleniId(zaposleniId));
}

@GetMapping(value = "/plata", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getPlata(@RequestParam(name = "search", required = false, defaultValue = "") String search) {
Specification<Plata> spec = this.searchUtil.getSpec(search);
return ResponseEntity.ok(this.plataService.findAll(spec));
}

@GetMapping(value = "/plata/all", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getAllPlata() {
return ResponseEntity.ok(this.plataService.findAll());
}

@GetMapping(value = "/plata/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getPlataById(@PathVariable("id") Long plataId) {
Optional<Plata> optionalPlata = this.plataService.findById(plataId);
if (optionalPlata.isPresent())
return ResponseEntity.ok(optionalPlata.get());
throw new EntityNotFoundException();
}

@PostMapping(value = "/plata", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> newPlata(@Valid @RequestBody PlataRequest plata) {
try {
return ResponseEntity.ok(this.plataService.save(plata));
} catch (Exception e) {
throw new EntityNotFoundException();
}
}

@PutMapping(value = "/plata", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> editPlata(@Valid @RequestBody PlataRequest plata) {
Optional<Plata> optionalPlata = this.plataService.findById(plata.getPlataId());
if (optionalPlata.isPresent()) {
try {
return ResponseEntity.ok(this.plataService.save(plata));
} catch (Exception e) {
throw new EntityNotFoundException();
}
}
throw new EntityNotFoundException();
}

@DeleteMapping(value = "/plata/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> deletePlata(@PathVariable("id") Long plataId) {
Optional<Plata> optionalPlata = this.plataService.findById(plataId);
if (optionalPlata.isPresent()) {
this.plataService.deleteById(plataId);
return ResponseEntity.ok().build();
}
throw new EntityNotFoundException();
}
}
82 changes: 82 additions & 0 deletions src/main/java/rs/raf/demo/controllers/ZaposleniRestController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package rs.raf.demo.controllers;

import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import rs.raf.demo.model.Zaposleni;
import rs.raf.demo.services.IZaposleniService;
import rs.raf.demo.specifications.RacunSpecificationsBuilder;

import javax.persistence.EntityNotFoundException;
import javax.validation.Valid;
import java.util.List;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@CrossOrigin
@RestController
@SecurityRequirement(name = "bearerAuth")
@RequestMapping("/api/zaposleni")
public class ZaposleniRestController {

private final IZaposleniService iZaposleniService;

public ZaposleniRestController(IZaposleniService iZaposleniService) {
this.iZaposleniService = iZaposleniService;

}

@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> createZaposleni(@Valid @RequestBody Zaposleni zaposleni) {
return ResponseEntity.ok(iZaposleniService.save(zaposleni));
}

@PutMapping(value = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> updateZaposleni(@Valid @RequestBody Zaposleni zaposleni, @PathVariable Long id) {
if (iZaposleniService.findById(id).isPresent())
return ResponseEntity.ok(iZaposleniService.updateZaposleni(zaposleni));
throw new EntityNotFoundException();
}

@DeleteMapping(value = "/{id}")
public ResponseEntity<?> zaposleniOtkaz(@PathVariable("id") Long id) {
Optional<Zaposleni> optionalZaposleni = iZaposleniService.findById(id);
if(optionalZaposleni.isPresent()){
return ResponseEntity.ok(iZaposleniService.otkazZaposleni(optionalZaposleni.get()));
}
throw new EntityNotFoundException();
}

@GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getZaposleniId(@PathVariable("id") Long id) {
Optional<Zaposleni> optionalZaposleni = iZaposleniService.findById(id);
if (optionalZaposleni.isPresent()) {
return ResponseEntity.ok(iZaposleniService.findById(id));
}
throw new EntityNotFoundException();
}

@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> search(@RequestParam(name = "search") String search) {
RacunSpecificationsBuilder<Zaposleni> builder = new RacunSpecificationsBuilder<>();

Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\w+?),");
Matcher matcher = pattern.matcher(search + ",");
while (matcher.find()) {
builder.with(matcher.group(1), matcher.group(2), matcher.group(3));
}

Specification<Zaposleni> spec = builder.build();

List<Zaposleni> result = iZaposleniService.findAll(spec);

if (result.isEmpty()) {
throw new EntityNotFoundException();
}

return ResponseEntity.ok(result);
}
}
Loading

0 comments on commit 72f80ac

Please sign in to comment.