-
Notifications
You must be signed in to change notification settings - Fork 1
Palkanlaskenta
Matti Luukkainen edited this page Nov 30, 2016
·
2 revisions
package fi.helsinki.cs.palkanlaskenta;
public class Main {
public static void main(String[] args) {
Palkanlaskenta p = new Palkanlaskenta();
p.lisaaTyontekija(1,"Arto", "123 456", "Mannerheimintie 10","[email protected]", "040-12345",10);
p.lisaaTunnit(1, 5);
System.out.println(p.tyontekijat("csv"));
System.out.println(p.maksuhistoria("csv"));
p.maksaPalkat();
System.out.println(p.maksuhistoria("csv"));
}
}
package fi.helsinki.cs.palkanlaskenta;
import java.util.ArrayList;
import java.util.List;
public class Palkanlaskenta extends MaksupalveluRajapinta {
private List<String> maksut;
private List<Henkilo> tyontekijat;
public Palkanlaskenta(){
maksut = new ArrayList<>();
tyontekijat = new ArrayList<>();
}
public boolean lisaaTyontekija(int tunnus, String nimi, String tilinro, String osoite, String email, String puhnro, int tuntipalkka){
for (Henkilo henkilo : tyontekijat) {
if (tunnus==henkilo.getTunnus()) {
return false;
}
}
Henkilo uusi = new Henkilo(tunnus, nimi, tilinro, osoite, email, puhnro, tuntipalkka);
tyontekijat.add(uusi);
return true;
}
public boolean lisaaTunnit(int tunnus, int tunnit) {
for (Henkilo henkilo : tyontekijat) {
if (tunnus==henkilo.getTunnus()) {
henkilo.lisaaTunnit(tunnit);
return true;
}
}
return false;
}
public boolean uusiTuntipalkka(int tunnus, int tuntipalkka) {
// TODO: to be implements
return false;
}
public void maksaPalkat(){
for (Henkilo henkilo : tyontekijat) {
List<Integer> hlonPalkat = henkilo.laskePalkat();
int hlonPalkkaYht = 0;
for (int palkka : hlonPalkat) {
hlonPalkkaYht += palkka;
}
String nimi = henkilo.getNimi();
String tili = henkilo.getTili();
suoritaTilisiirto(nimi, tili, hlonPalkkaYht);
String csv = ""+nimi+
";"+tili+
";"+hlonPalkkaYht;
maksut.add(csv);
}
}
public List<String> tyontekijat(String format) {
// TODO: add support for JSON and XML
if (!format.equals("csv")) {
throw new IllegalArgumentException("supported formats: csv");
}
List<String> csvt = new ArrayList<>();
for (Henkilo henkilo : tyontekijat) {
int tunnus = henkilo.getTunnus();
String nimi = henkilo.getNimi();
String tili = henkilo.getTili();
int tuntiPalkka = henkilo.getTuntipalkka();
String csv = ""+tunnus+
";"+nimi+
";"+tili+
";"+tuntiPalkka;
csvt.add(csv);
}
return csvt;
}
public List<String> maksuhistoria(String format) {
// TODO: add support for JSON and XML
if (!format.equals("csv")) {
throw new IllegalArgumentException("supported formats: csv");
}
return maksut;
}
}
package fi.helsinki.cs.palkanlaskenta;
import java.util.ArrayList;
import java.util.List;
public class Henkilo {
private int tunnus;
private String nimi;
private String osoite;
private String email;
private String puhnro;
private String tili;
private int tuntipalkka;
private ArrayList<Integer> maksamattomatTunnit;
public Henkilo(int tunnus, String nimi, String tili, String osoite, String email, String puhnro, int tuntipalkka) {
this.tunnus = tunnus;
this.nimi = nimi;
this.osoite = osoite;
this.email = email;
this.puhnro = puhnro;
this.tili = tili;
this.tuntipalkka = tuntipalkka;
this.maksamattomatTunnit = new ArrayList<>();
}
public int getTunnus() {
return tunnus;
}
public String getNimi() {
return nimi;
}
public String getTili() {
return tili;
}
public int getTuntipalkka() {
return tuntipalkka;
}
public void lisaaTunnit(int tunnit) {
maksamattomatTunnit.add(tunnit);
}
public List<Integer> laskePalkat() {
List<Integer> palkat = new ArrayList<>();
for (int tunti : maksamattomatTunnit) {
palkat.add(tunti*tuntipalkka);
}
maksamattomatTunnit = new ArrayList<>();
return palkat;
}
}
package fi.helsinki.cs.palkanlaskenta;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.http.HttpResponse;
import org.apache.http.client.fluent.Request;
import org.apache.http.entity.ContentType;
public class MaksupalveluRajapinta {
String url;
public MaksupalveluRajapinta() {
this.url = "http://otmpaymentinterface.herokuapp.com/payments";
}
public void suoritaTilisiirto(String nimi, String tili, int summa){
Payment maksu = new Payment(nimi, tili, summa);
try {
HttpResponse httpResponse = Request.Post(url)
.bodyString(new Gson().toJson(maksu), ContentType.APPLICATION_JSON)
.execute().returnResponse();
} catch (IOException ex) {
System.out.println(ex);
}
}
class Payment{
String name;
String account;
int amount;
public Payment(String name, String account, int amount) {
this.name = name;
this.account = account;
this.amount = amount;
}
}
}
Palkanlaskennan testit
public class PalkanlaskentaTest {
Palkanlaskenta p;
@Before
public void setUp() {
p = new Palkanlaskenta();
}
@Test
public void alussaEiMaksujaEikaTuontekijoita(){
assertTrue(p.maksuhistoria("csv").isEmpty());
assertTrue(p.tyontekijat("csv").isEmpty());
}
@Test
public void yksiLisattyTyontekijaIlmanTunteja(){
boolean ok = p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345",10);
assertTrue(ok);
assertEquals(1, p.tyontekijat("csv").size());
List<String> odotettu = new ArrayList<>();
odotettu.add(toCSV("1","Arto", "123 456", "10"));
assertContent(odotettu,p.tyontekijat("csv"));
assertEquals(0, p.maksuhistoria("csv").size());
}
@Test
public void samaIdEiVoiOllaKahdellaTyontekijalla(){
boolean ok = p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345", 10);
assertTrue(ok);
ok = p.lisaaTyontekija(1,"Pekka", "123 457", "hämeentie","[email protected]","040-44345",20);
assertFalse(ok);
assertEquals(1, p.tyontekijat("csv").size());
List<String> odotettu = new ArrayList<>();
odotettu.add(toCSV("1","Arto", "123 456", "10"));
assertContent(odotettu,p.tyontekijat("csv"));
}
@Test
public void tuntienLisaaminenTyontekijalle(){
p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345",10);
p.lisaaTunnit(1, 5);
assertEquals(0, p.maksuhistoria("csv").size());
p.maksaPalkat();
assertEquals(1, p.maksuhistoria("csv").size());
List<String> odotettu = new ArrayList<>();
odotettu.add(toCSV("Arto", "123 456", "50"));
assertContent(odotettu,p.maksuhistoria("csv"));
}
@Test
public void tuntienLisaaminenTyontekijalleMontaKertaa(){
p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345",10);
p.lisaaTunnit(1, 5);
p.lisaaTunnit(1, 20);
assertEquals(0, p.maksuhistoria("csv").size());
p.maksaPalkat();
assertEquals(1, p.maksuhistoria("csv").size());
List<String> odotettu = new ArrayList<>();
odotettu.add(toCSV("Arto", "123 456", "250"));
assertContent(odotettu,p.maksuhistoria("csv"));
}
@Test
public void tuntejaEiVoiLisataTuntemattomalleTyontekijalle(){
p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345",10);
boolean ok = p.lisaaTunnit(2, 5);
assertFalse(ok);
}
@Test
public void montaTyontekijaa(){
p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345",10);
p.lisaaTyontekija(2,"Liisa", "123 457", "hämeentie","[email protected]","040-44345",20);
assertEquals(2, p.tyontekijat("csv").size());
List<String> odotettu = new ArrayList<>();
odotettu.add(toCSV("1","Arto", "123 456", "10"));
odotettu.add(toCSV("2","Liisa", "123 457", "20"));
assertContent(odotettu,p.tyontekijat("csv"));
}
@Test
public void tuntienLisaaminenMonelleTyontekijalle(){
p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345",10);
p.lisaaTyontekija(2,"Liisa", "123 457", "hämeentie","[email protected]","040-44345",20);
p.lisaaTunnit(1, 5);
p.lisaaTunnit(1, 5);
p.lisaaTunnit(2, 20);
p.lisaaTunnit(2, 5);
p.lisaaTunnit(1, 10);
assertEquals(0, p.maksuhistoria("csv").size());
p.maksaPalkat();
assertEquals(2, p.maksuhistoria("csv").size());
List<String> odotettu = new ArrayList<>();
odotettu.add(toCSV("Arto", "123 456", "200"));
odotettu.add(toCSV("Liisa", "123 457", "500"));
assertContent(odotettu,p.maksuhistoria("csv"));
}
@Test
public void tuntienLisaaminenJaToinenPalkanmaksu(){
p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345",10);
p.lisaaTunnit(1, 5);
assertEquals(0, p.maksuhistoria("csv").size());
p.maksaPalkat();
assertEquals(1, p.maksuhistoria("csv").size());
List<String> odotettu = new ArrayList<>();
odotettu.add(toCSV("Arto", "123 456", "50"));
assertContent(odotettu,p.maksuhistoria("csv"));
p.lisaaTunnit(1, 15);
p.lisaaTunnit(1, 20);
assertEquals(1, p.maksuhistoria("csv").size());
p.maksaPalkat();
assertEquals(2, p.maksuhistoria("csv").size());
odotettu = new ArrayList<>();
odotettu.add(toCSV("Arto", "123 456", "50"));
odotettu.add(toCSV("Arto", "123 456", "350"));
assertContent(odotettu,p.maksuhistoria("csv"));
}
@Test
public void palkanMuuttuminenHuomioidaanMaksussa(){
p.lisaaTyontekija(1,"Arto", "123 456", "mannerheimintie","[email protected]","040-12345", 10);
p.lisaaTunnit(1, 10);
p.uusiTuntipalkka(1, 20);
p.lisaaTunnit(1, 10);
p.maksaPalkat();
assertEquals(1, p.maksuhistoria("csv").size());
List<String> odotettu = new ArrayList<>();
// maksetun palkan tulee olla nyt 300 euroa, sillä tunteja on kirjattu
// 10h tuntipalkalla 10 e
// 10h tuntipalkalla 20 e
odotettu.add(toCSV("Arto", "123 456", "300"));
assertContent(odotettu,p.maksuhistoria("csv"));
}
private void assertContent(List<String> odotettu, List<String> tulos){
assertEquals(odotettu.size(), tulos.size());
for (String tulosRivi : tulos) {
assertTrue("palautettu "+tulosRivi+" ei odotettujen "+odotettu+ " joukossa",odotettu.contains(tulosRivi));
}
}
private String toCSV(String... osat){
String csv = "";
for (int i = 0; i < osat.length-1; i++) {
csv += osat[i]+ ";";
}
csv += osat[osat.length-1];
return csv;
}
}