Skip to content

Commit

Permalink
Issue RAF-SI-2021#28: Ruta za glavnu knjigu (RAF-SI-2021#67)
Browse files Browse the repository at this point in the history
* odradjena ruta za glavnu knjigu

* vraceno ime user tabele na default vrednost

* Izbrisan dupli import i ispravljena greska u sonaru

* refaktorisan search i prebacen convert u servis

* obrisani nepotrebni fajlovi

* greske iz sonara i male ispravke

* dodat sort i page-ing

* vraceno ime user tabele na default

* ispravka za sonar
  • Loading branch information
Bagelax authored and Marec99 committed Apr 7, 2022
1 parent 1f8931d commit 2b253b1
Show file tree
Hide file tree
Showing 9 changed files with 198 additions and 3 deletions.
56 changes: 55 additions & 1 deletion src/main/java/rs/raf/demo/bootstrap/BootstrapData.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import rs.raf.demo.repositories.*;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

Expand All @@ -24,14 +25,27 @@ public class BootstrapData implements CommandLineRunner {
private final FakturaRepository fakturaRepository;
private final PreduzeceRepository preduzeceRepository;
private final PasswordEncoder passwordEncoder;
private final KontnaGrupaRepository kontnaGrupaRepository;
private final KontoRepository kontoRepository;
private final KnjizenjeRepository knjizenjeRepository;

@Autowired
public BootstrapData(UserRepository userRepository,FakturaRepository fakturaRepository, PreduzeceRepository preduzeceRepository, PermissionRepository permissionRepository, PasswordEncoder passwordEncoder) {
public BootstrapData(UserRepository userRepository,
FakturaRepository fakturaRepository,
PermissionRepository permissionRepository,
PasswordEncoder passwordEncoder,
KontoRepository kontoRepository,
KontnaGrupaRepository kontnaGrupaRepository,
KnjizenjeRepository knjizenjeRepository,
PreduzeceRepository preduzeceRepository) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
this.permissionRepository = permissionRepository;
this.fakturaRepository = fakturaRepository;
this.preduzeceRepository = preduzeceRepository;
this.kontoRepository = kontoRepository;
this.kontnaGrupaRepository = kontnaGrupaRepository;
this.knjizenjeRepository = knjizenjeRepository;
}

private Preduzece getDefaultPreduzece(){
Expand Down Expand Up @@ -123,11 +137,51 @@ public void run(String... args) throws Exception {
Faktura f4 = getDefaultFaktura();
f4.setIznos(4000.00);


this.fakturaRepository.save(f1);
this.fakturaRepository.save(f2);
this.fakturaRepository.save(f3);
this.fakturaRepository.save(f4);

KontnaGrupa kg1 = new KontnaGrupa();
kg1.setBrojKonta("0");
kg1.setNazivKonta("Naziv kontne grupe 0");
KontnaGrupa kg2 = new KontnaGrupa();
kg2.setBrojKonta("1");
kg2.setNazivKonta("Naziv kontne grupe 1");
this.kontnaGrupaRepository.save(kg1);
this.kontnaGrupaRepository.save(kg2);

Knjizenje knj1 = new Knjizenje();
knj1.setDatumKnjizenja(new Date());
Knjizenje knj2 = new Knjizenje();
knj2.setDatumKnjizenja(new Date());
this.knjizenjeRepository.save(knj1);
this.knjizenjeRepository.save(knj2);

Konto k1 = new Konto();
k1.setDuguje(200.0);
k1.setPotrazuje(300.0);
k1.setKontnaGrupa(kg1);
k1.setKnjizenje(knj1);
Konto k2 = new Konto();
k2.setDuguje(800.0);
k2.setPotrazuje(1300.0);
k2.setKontnaGrupa(kg2);
k2.setKnjizenje(knj1);
Konto k3 = new Konto();
k3.setDuguje(500.0);
k3.setPotrazuje(300.0);
k3.setKontnaGrupa(kg1);
k3.setKnjizenje(knj2);
Konto k4 = new Konto();
k4.setDuguje(1200.0);
k4.setPotrazuje(300.0);
k4.setKontnaGrupa(kg2);
k4.setKnjizenje(knj2);

this.kontoRepository.saveAll(Arrays.asList(k1, k2, k3, k4));

log.info("Data loaded!");
}
}
46 changes: 46 additions & 0 deletions src/main/java/rs/raf/demo/controllers/GlavnaKnjigaController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package rs.raf.demo.controllers;

import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springframework.data.domain.Pageable;
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.Konto;
import rs.raf.demo.services.impl.KontoService;
import rs.raf.demo.utils.ApiUtil;
import rs.raf.demo.utils.SearchUtil;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;


@CrossOrigin
@RestController
@SecurityRequirement(name = "bearerAuth")
@RequestMapping("/api/glavna-knjiga")
public class GlavnaKnjigaController {

private final KontoService kontoService;
private final SearchUtil<Konto> searchUtil;

public GlavnaKnjigaController(KontoService kontoService) {
this.kontoService = kontoService;
this.searchUtil = new SearchUtil<>();
}

@GetMapping(value = "/{kontnaGrupa}",
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));
}
}
27 changes: 27 additions & 0 deletions src/main/java/rs/raf/demo/converter/KontoConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package rs.raf.demo.converter;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.stereotype.Component;
import rs.raf.demo.model.Konto;
import rs.raf.demo.responses.GlavnaKnjigaResponse;

import java.util.List;
import java.util.stream.Collectors;

@Component
public class KontoConverter {

public Page<GlavnaKnjigaResponse> convert(List<Konto> kontoList) {
return new PageImpl<>(kontoList.stream().map(
konto -> new GlavnaKnjigaResponse(
konto.getKnjizenje().getKnjizenjeId(),
konto.getKnjizenje().getDatumKnjizenja(),
konto.getPotrazuje(),
konto.getDuguje(),
konto.getDuguje() - konto.getPotrazuje(),
konto.getKontnaGrupa().getNazivKonta(),
konto.getKontnaGrupa().getBrojKonta())
).collect(Collectors.toList()));
}
}
2 changes: 0 additions & 2 deletions src/main/java/rs/raf/demo/model/Konto.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import lombok.Setter;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.util.List;

@Entity
@Getter
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/rs/raf/demo/relations/KontnaGrupaRelations.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package rs.raf.demo.relations;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Root;

public class KontnaGrupaRelations<T> extends ForeignKeyRelations<T> {
public KontnaGrupaRelations(Root<T> root, CriteriaBuilder builder, String key, String val) {
super(root, builder, key, val);
idExpression = root.get(key).get("brojKonta").as(Long.class);
}
}
14 changes: 14 additions & 0 deletions src/main/java/rs/raf/demo/repositories/KontoRepository.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,23 @@
package rs.raf.demo.repositories;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import rs.raf.demo.model.Konto;

import java.util.List;

@Repository
public interface KontoRepository extends JpaRepository<Konto, Long> {

public List<Konto> findAll();

List<Konto> findKontoByKontnaGrupaBrojKonta(String kontnaGrupaId);

List<Konto> findAll(Specification<Konto> spec);

Page<Konto> findAll(Specification<Konto> spec, Pageable pageSort);

}
18 changes: 18 additions & 0 deletions src/main/java/rs/raf/demo/responses/GlavnaKnjigaResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package rs.raf.demo.responses;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.Date;

@Data
@AllArgsConstructor
public class GlavnaKnjigaResponse {
Long brojNaloga;
Date datum;
Double potrazuje;
Double duguje;
Double saldo;
String nazivKonta;
String konto;
}
23 changes: 23 additions & 0 deletions src/main/java/rs/raf/demo/services/impl/KontoService.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
package rs.raf.demo.services.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import rs.raf.demo.converter.KontoConverter;
import rs.raf.demo.model.Konto;
import rs.raf.demo.repositories.KontoRepository;
import rs.raf.demo.responses.GlavnaKnjigaResponse;
import rs.raf.demo.services.IService;

import java.util.*;

@Service
public class KontoService implements IService<Konto, Long> {

@Lazy
@Autowired
private KontoConverter kontoConverter;

private final KontoRepository kontoRepository;

@Autowired
Expand Down Expand Up @@ -40,4 +51,16 @@ public List<Konto> findAll() {
public void deleteById(Long id) {
kontoRepository.deleteById(id);
}

public List<Konto> findByKontnaGrupa(String kontnaGrupa) {
return this.kontoRepository.findKontoByKontnaGrupaBrojKonta(kontnaGrupa);
}

public List<Konto> findAll(Specification<Konto> spec) {
return this.kontoRepository.findAll(spec);
}

public Page<GlavnaKnjigaResponse> findAllGlavnaKnjigaResponse(Specification<Konto> spec, Pageable pageSort) {
return this.kontoConverter.convert(this.kontoRepository.findAll(spec, pageSort).getContent());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.springframework.data.jpa.domain.Specification;
import rs.raf.demo.exceptions.OperationNotSupportedException;
import rs.raf.demo.model.Dokument;
import rs.raf.demo.model.KontnaGrupa;
import rs.raf.demo.model.Preduzece;
import rs.raf.demo.model.enums.TipFakture;
import rs.raf.demo.relations.*;
Expand Down Expand Up @@ -42,6 +43,9 @@ private RacunRelations<T> getRelations(Root<T> root, CriteriaBuilder builder, Cl
if (TipFakture.class == keyType) {
return new TipFaktureRelations<>(root, builder, key, val);
}
if (KontnaGrupa.class == keyType) {
return new KontnaGrupaRelations<>(root, builder, key, val);
}

throw new OperationNotSupportedException(String.format("Josuvek nije podrzano filtriranje po tipu %s(%s)", key, keyType));
}
Expand Down

0 comments on commit 2b253b1

Please sign in to comment.