Skip to content

Commit 42e0c37

Browse files
admin: Tax Rates
1 parent 123bfa7 commit 42e0c37

File tree

16 files changed

+437
-49
lines changed

16 files changed

+437
-49
lines changed

src/main/java/org/woehlke/greenshop/admin/entities/TaxRate.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.woehlke.greenshop.admin.entities;
22

3+
import org.hibernate.validator.constraints.Length;
4+
35
import javax.persistence.*;
46
import java.util.Date;
57

@@ -41,6 +43,10 @@ public class TaxRate {
4143
@Column(name="tax_rate",columnDefinition = "decimal(7,4)")
4244
private Double taxRate;
4345

46+
@Length(max = 255)
47+
@Column(name="tax_description",columnDefinition = "varchar(255)")
48+
private String description;
49+
4450
@Temporal(value=TemporalType.TIMESTAMP)
4551
@Column(name="last_modified")
4652
private Date lastModified;
@@ -89,6 +95,14 @@ public void setTaxRate(Double taxRate) {
8995
this.taxRate = taxRate;
9096
}
9197

98+
public String getDescription() {
99+
return description;
100+
}
101+
102+
public void setDescription(String description) {
103+
this.description = description;
104+
}
105+
92106
public Date getLastModified() {
93107
return lastModified;
94108
}
@@ -113,6 +127,8 @@ public boolean equals(Object o) {
113127
TaxRate taxRate1 = (TaxRate) o;
114128

115129
if (dateAdded != null ? !dateAdded.equals(taxRate1.dateAdded) : taxRate1.dateAdded != null) return false;
130+
if (description != null ? !description.equals(taxRate1.description) : taxRate1.description != null)
131+
return false;
116132
if (id != null ? !id.equals(taxRate1.id) : taxRate1.id != null) return false;
117133
if (lastModified != null ? !lastModified.equals(taxRate1.lastModified) : taxRate1.lastModified != null)
118134
return false;
@@ -131,6 +147,7 @@ public int hashCode() {
131147
result = 31 * result + (taxClass != null ? taxClass.hashCode() : 0);
132148
result = 31 * result + (priority != null ? priority.hashCode() : 0);
133149
result = 31 * result + (taxRate != null ? taxRate.hashCode() : 0);
150+
result = 31 * result + (description != null ? description.hashCode() : 0);
134151
result = 31 * result + (lastModified != null ? lastModified.hashCode() : 0);
135152
result = 31 * result + (dateAdded != null ? dateAdded.hashCode() : 0);
136153
return result;
@@ -144,6 +161,7 @@ public String toString() {
144161
", taxClass=" + taxClass +
145162
", priority=" + priority +
146163
", taxRate=" + taxRate +
164+
", description='" + description + '\'' +
147165
", lastModified=" + lastModified +
148166
", dateAdded=" + dateAdded +
149167
'}';

src/main/java/org/woehlke/greenshop/admin/service/TaxClassService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public interface TaxClassService {
1313

1414
TaxClass findById(long taxClassId);
1515

16+
List<TaxClass> findAll();
17+
1618
Page<TaxClass> findAll(Pageable pageRequest);
1719

1820
void create(TaxClass thisTaxClass);

src/main/java/org/woehlke/greenshop/admin/service/TaxClassServiceImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public TaxClass findById(long taxClassId) {
2727
return taxClassRepository.findOne(taxClassId);
2828
}
2929

30+
@Override
31+
public List<TaxClass> findAll() {
32+
return taxClassRepository.findAll();
33+
}
34+
3035
@Override
3136
public Page<TaxClass> findAll(Pageable pageRequest) {
3237
return taxClassRepository.findAll(pageRequest);
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.woehlke.greenshop.admin.service;
22

3+
import org.springframework.data.domain.Page;
4+
import org.springframework.data.domain.Pageable;
35
import org.woehlke.greenshop.admin.entities.TaxRate;
46

57
import java.util.List;
@@ -9,7 +11,14 @@
911
*/
1012
public interface TaxRateService {
1113

12-
List<TaxRate> findAllTaxRates();
14+
Page<TaxRate> findAll(Pageable pageRequest);
15+
16+
TaxRate findById(long taxRateId);
17+
18+
void delete(TaxRate thisTaxRate);
19+
20+
void update(TaxRate loadedTaxRate);
21+
22+
void create(TaxRate thisTaxRate);
1323

14-
TaxRate findTaxRateById(long taxRateId);
1524
}

src/main/java/org/woehlke/greenshop/admin/service/TaxRateServiceImpl.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package org.woehlke.greenshop.admin.service;
22

3+
import org.springframework.data.domain.Page;
4+
import org.springframework.data.domain.Pageable;
35
import org.springframework.transaction.annotation.Propagation;
46
import org.springframework.transaction.annotation.Transactional;
57
import org.woehlke.greenshop.admin.entities.TaxRate;
68
import org.woehlke.greenshop.admin.repository.TaxRateRepository;
79

810
import javax.inject.Inject;
911
import javax.inject.Named;
10-
import java.util.List;
12+
import java.util.Date;
1113

1214
/**
1315
* Created by tw on 30.01.15.
@@ -20,12 +22,31 @@ public class TaxRateServiceImpl implements TaxRateService {
2022
private TaxRateRepository taxRateRepository;
2123

2224
@Override
23-
public List<TaxRate> findAllTaxRates() {
24-
return taxRateRepository.findAll();
25+
public Page<TaxRate> findAll(Pageable pageRequest) {
26+
return taxRateRepository.findAll(pageRequest);
2527
}
2628

2729
@Override
28-
public TaxRate findTaxRateById(long taxRateId) {
30+
public TaxRate findById(long taxRateId) {
2931
return taxRateRepository.findOne(taxRateId);
3032
}
33+
34+
@Override
35+
@Transactional(readOnly=false,propagation=Propagation.REQUIRES_NEW)
36+
public void delete(TaxRate thisTaxRate) {
37+
taxRateRepository.delete(thisTaxRate);
38+
}
39+
40+
@Override
41+
@Transactional(readOnly=false,propagation=Propagation.REQUIRES_NEW)
42+
public void update(TaxRate loadedTaxRate) {
43+
taxRateRepository.save(loadedTaxRate);
44+
}
45+
46+
@Override
47+
@Transactional(readOnly=false,propagation=Propagation.REQUIRES_NEW)
48+
public void create(TaxRate thisTaxRate) {
49+
thisTaxRate.setDateAdded(new Date());
50+
taxRateRepository.save(thisTaxRate);
51+
}
3152
}

src/main/java/org/woehlke/greenshop/admin/service/TaxZoneService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
*/
1212
public interface TaxZoneService {
1313

14+
List<TaxZone> findAll();
15+
1416
Page<TaxZone> findAllTaxZones(Pageable pageRequest);
1517

1618
TaxZone findTaxZoneById(long taxZoneId);

src/main/java/org/woehlke/greenshop/admin/service/TaxZoneServiceImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ public void updateTaxZone(TaxZone thisTaxZone) {
5252
taxZoneRepository.save(tz);
5353
}
5454

55+
@Override
56+
public List<TaxZone> findAll() {
57+
return taxZoneRepository.findAll();
58+
}
59+
5560
@Override
5661
public Page<TaxZone> findAllTaxZones(Pageable pageRequest) {
5762
return taxZoneRepository.findAll(pageRequest);
Lines changed: 138 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
11
package org.woehlke.greenshop.admin.web.taxes;
22

3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
import org.springframework.data.domain.Page;
6+
import org.springframework.data.domain.PageRequest;
7+
import org.springframework.data.domain.Pageable;
8+
import org.springframework.data.domain.Sort;
39
import org.springframework.stereotype.Controller;
410
import org.springframework.ui.Model;
11+
import org.springframework.validation.BindingResult;
512
import org.springframework.web.bind.annotation.*;
613
import org.woehlke.greenshop.admin.AdminMenuCategory;
14+
import org.woehlke.greenshop.admin.entities.TaxClass;
715
import org.woehlke.greenshop.admin.entities.TaxRate;
16+
import org.woehlke.greenshop.admin.entities.TaxZone;
17+
import org.woehlke.greenshop.admin.service.TaxClassService;
818
import org.woehlke.greenshop.admin.service.TaxRateService;
19+
import org.woehlke.greenshop.admin.service.TaxZoneService;
920

1021
import javax.inject.Inject;
22+
import javax.validation.Valid;
23+
import java.util.Date;
1124
import java.util.List;
1225

1326
/**
@@ -16,34 +29,150 @@
1629
@Controller
1730
public class TaxRateController {
1831

32+
private static final Logger logger = LoggerFactory.getLogger(TaxRateController.class);
33+
1934
@Inject
2035
private TaxRateService taxRateService;
2136

37+
@Inject
38+
private TaxZoneService taxZoneService;
39+
40+
@Inject
41+
private TaxClassService taxClassService;
42+
43+
private final static int PAGE_SIZE = 20;
44+
45+
private final static String FIRST_PAGE = "0";
46+
2247
@RequestMapping(value = "/admin/taxRates", method = RequestMethod.GET)
23-
public String taxRates(Model model){
48+
public String taxRates(@RequestParam(value="page",defaultValue=FIRST_PAGE) int page, Model model){
2449
int menuCategory = AdminMenuCategory.LOCATION_TAXES.ordinal();
2550
model.addAttribute("menuCategory",menuCategory);
26-
List<TaxRate> taxRates = taxRateService.findAllTaxRates();
51+
Pageable pageRequest = new PageRequest(page,PAGE_SIZE, Sort.Direction.ASC, "priority");
52+
Page<TaxRate> taxRates = taxRateService.findAll(pageRequest);
2753
model.addAttribute("taxRates",taxRates);
2854
TaxRate thisTaxRate = null;
29-
if(taxRates.size()>0){
55+
if(taxRates.getContent().size()>0){
3056
thisTaxRate = taxRates.iterator().next();
3157
}
3258
model.addAttribute("thisTaxRate",thisTaxRate);
3359
return "admin/taxes/taxRates";
3460
}
3561

3662
@RequestMapping(value = "/admin/taxRates/{taxRateId}", method = RequestMethod.GET)
37-
public String taxRateId(@PathVariable long taxRateId, Model model){
63+
public String taxRateId(@PathVariable long taxRateId,
64+
@RequestParam(value="page",defaultValue=FIRST_PAGE) int page,
65+
Model model) {
66+
int menuCategory = AdminMenuCategory.LOCATION_TAXES.ordinal();
67+
model.addAttribute("menuCategory", menuCategory);
68+
Pageable pageRequest = new PageRequest(page, PAGE_SIZE, Sort.Direction.ASC, "priority");
69+
Page<TaxRate> taxRates = taxRateService.findAll(pageRequest);
70+
model.addAttribute("taxRates", taxRates);
71+
TaxRate thisTaxRate = null;
72+
if (taxRates.getContent().size() > 0) {
73+
thisTaxRate = taxRateService.findById(taxRateId);
74+
}
75+
model.addAttribute("thisTaxRate", thisTaxRate);
76+
return "admin/taxes/taxRates";
77+
}
78+
79+
@RequestMapping(value = "/admin/taxRates/insert", method = RequestMethod.GET)
80+
public String taxRateInsertForm(@RequestParam(value="page",defaultValue=FIRST_PAGE) int page, Model model){
3881
int menuCategory = AdminMenuCategory.LOCATION_TAXES.ordinal();
3982
model.addAttribute("menuCategory",menuCategory);
40-
List<TaxRate> taxRates = taxRateService.findAllTaxRates();
83+
Pageable pageRequest = new PageRequest(page,PAGE_SIZE, Sort.Direction.ASC, "priority");
84+
Page<TaxRate> taxRates = taxRateService.findAll(pageRequest);
4185
model.addAttribute("taxRates",taxRates);
42-
TaxRate thisTaxRate = null;
43-
if(taxRates.size()>0){
44-
thisTaxRate = taxRateService.findTaxRateById(taxRateId);
86+
TaxRate thisTaxRate = new TaxRate();
87+
model.addAttribute("thisTaxRate",thisTaxRate);
88+
List<TaxZone> taxZones = taxZoneService.findAll();
89+
model.addAttribute("taxZones",taxZones);
90+
List<TaxClass> taxClasses = taxClassService.findAll();
91+
model.addAttribute("taxClasses",taxClasses);
92+
return "admin/taxes/taxRatesInsertForm";
93+
}
94+
95+
@RequestMapping(value = "/admin/taxRates/insert", method = RequestMethod.POST)
96+
public String taxRateInsertPerform(@RequestParam(value="page",defaultValue=FIRST_PAGE) int page,
97+
@Valid TaxRate thisTaxRate, BindingResult result, Model model){
98+
logger.info("TaxRate: "+thisTaxRate.toString());
99+
if(result.hasErrors()){
100+
int menuCategory = AdminMenuCategory.LOCATION_TAXES.ordinal();
101+
model.addAttribute("menuCategory",menuCategory);
102+
Pageable pageRequest = new PageRequest(page,PAGE_SIZE, Sort.Direction.ASC, "priority");
103+
Page<TaxRate> taxRates = taxRateService.findAll(pageRequest);
104+
model.addAttribute("taxRates",taxRates);
105+
model.addAttribute("thisTaxRate",thisTaxRate);
106+
return "admin/taxes/taxRatesInsertForm";
107+
} else {
108+
taxRateService.create(thisTaxRate);
109+
return "redirect:/admin/taxRates/"+thisTaxRate.getId()+ "?page="+page;
45110
}
111+
}
112+
113+
@RequestMapping(value = "/admin/taxRates/{taxRateId}/edit", method = RequestMethod.GET)
114+
public String taxRateEditForm(@PathVariable long taxRateId,
115+
@RequestParam(value="page",defaultValue=FIRST_PAGE) int page,
116+
Model model){
117+
int menuCategory = AdminMenuCategory.LOCATION_TAXES.ordinal();
118+
model.addAttribute("menuCategory",menuCategory);
119+
TaxRate thisTaxRate = taxRateService.findById(taxRateId);
46120
model.addAttribute("thisTaxRate",thisTaxRate);
47-
return "admin/taxes/taxRates";
121+
Pageable pageRequest = new PageRequest(page,PAGE_SIZE, Sort.Direction.ASC, "priority");
122+
Page<TaxRate> taxRates = taxRateService.findAll(pageRequest);
123+
model.addAttribute("taxRates",taxRates);
124+
List<TaxZone> taxZones = taxZoneService.findAll();
125+
model.addAttribute("taxZones",taxZones);
126+
List<TaxClass> taxClasses = taxClassService.findAll();
127+
model.addAttribute("taxClasses",taxClasses);
128+
return "admin/taxes/taxRatesEditForm";
129+
}
130+
131+
@RequestMapping(value = "/admin/taxRates/{taxRateId}/edit", method = RequestMethod.POST)
132+
public String taxRateEditSave(@PathVariable long taxRateId,
133+
@RequestParam(value="page",defaultValue=FIRST_PAGE) int page,
134+
@Valid TaxRate thisTaxRate, BindingResult result, Model model){
135+
logger.info("TaxRate: "+thisTaxRate.toString());
136+
if(result.hasErrors()){
137+
int menuCategory = AdminMenuCategory.LOCATION_TAXES.ordinal();
138+
model.addAttribute("menuCategory",menuCategory);
139+
model.addAttribute("thisTaxRate",thisTaxRate);
140+
Pageable pageRequest = new PageRequest(page,PAGE_SIZE, Sort.Direction.ASC, "priority");
141+
Page<TaxRate> taxRates = taxRateService.findAll(pageRequest);
142+
model.addAttribute("taxRates",taxRates);
143+
return "admin/taxes/taxRatesEditForm";
144+
} else {
145+
TaxRate loadedTaxRate = taxRateService.findById(taxRateId);
146+
loadedTaxRate.setLastModified(new Date());
147+
loadedTaxRate.setPriority(thisTaxRate.getPriority());
148+
loadedTaxRate.setTaxRate(thisTaxRate.getTaxRate());
149+
loadedTaxRate.setTaxClass(thisTaxRate.getTaxClass());
150+
loadedTaxRate.setTaxZone(thisTaxRate.getTaxZone());
151+
taxRateService.update(loadedTaxRate);
152+
return "redirect:/admin/taxRates/"+taxRateId+"?page="+page;
153+
}
154+
}
155+
156+
@RequestMapping(value = "/admin/taxRates/{taxRateId}/delete", method = RequestMethod.GET)
157+
public String taxRateDeleteForm(@PathVariable long taxRateId,
158+
@RequestParam(value="page",defaultValue=FIRST_PAGE) int page,
159+
Model model){
160+
int menuCategory = AdminMenuCategory.LOCATION_TAXES.ordinal();
161+
model.addAttribute("menuCategory",menuCategory);
162+
TaxRate thisTaxRate = taxRateService.findById(taxRateId);
163+
model.addAttribute("thisTaxRate",thisTaxRate);
164+
Pageable pageRequest = new PageRequest(page,PAGE_SIZE, Sort.Direction.ASC, "priority");
165+
Page<TaxRate> taxRates = taxRateService.findAll(pageRequest);
166+
model.addAttribute("taxRates",taxRates);
167+
return "admin/taxes/taxRatesDeleteForm";
168+
}
169+
170+
@RequestMapping(value = "/admin/taxRates/{taxRateId}/delete", method = RequestMethod.POST)
171+
public String taxRateDeleteSave(@PathVariable long taxRateId,
172+
@RequestParam(value="page",defaultValue=FIRST_PAGE) int page,
173+
Model model){
174+
TaxRate thisTaxRate = taxRateService.findById(taxRateId);
175+
taxRateService.delete(thisTaxRate);
176+
return "redirect:/admin/taxRates?page="+page;
48177
}
49178
}

src/main/webapp/WEB-INF/jsp/admin/admin-tiles.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,18 @@
157157
<put-attribute name="bodyContent" value="/WEB-INF/jsp/admin/taxes/taxRates.jsp" />
158158
</definition>
159159

160+
<definition name="admin/taxes/taxRatesInsertForm" extends="backend">
161+
<put-attribute name="bodyContent" value="/WEB-INF/jsp/admin/taxes/taxRatesInsertForm.jsp" />
162+
</definition>
163+
164+
<definition name="admin/taxes/taxRatesEditForm" extends="backend">
165+
<put-attribute name="bodyContent" value="/WEB-INF/jsp/admin/taxes/taxRatesEditForm.jsp" />
166+
</definition>
167+
168+
<definition name="admin/taxes/taxRatesDeleteForm" extends="backend">
169+
<put-attribute name="bodyContent" value="/WEB-INF/jsp/admin/taxes/taxRatesDeleteForm.jsp" />
170+
</definition>
171+
160172

161173
<!-- reports -->
162174

0 commit comments

Comments
 (0)