package fi.otavanopisto.pyramus.dao.base;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.otavanopisto.pyramus.dao.PyramusEntityDAO;
import fi.otavanopisto.pyramus.domainmodel.base.BillingDetails;
import fi.otavanopisto.pyramus.domainmodel.courses.CourseStudent;
import fi.otavanopisto.pyramus.domainmodel.courses.CourseStudent_;
import fi.otavanopisto.pyramus.domainmodel.students.Student;
@Stateless
public class BillingDetailsDAO extends PyramusEntityDAO<BillingDetails> {
public BillingDetails create(String personName, String companyName, String streetAddress1, String streetAddress2,
String postalCode, String city, String region, String country, String phoneNumber, String emailAddress, String electronicBillingAddress,
String companyIdentifier, String referenceNumber, String notes) {
BillingDetails billingDetails = new BillingDetails();
billingDetails.setPersonName(personName);
billingDetails.setCompanyName(companyName);
billingDetails.setStreetAddress1(streetAddress1);
billingDetails.setStreetAddress2(streetAddress2);
billingDetails.setPostalCode(postalCode);
billingDetails.setCity(city);
billingDetails.setRegion(region);
billingDetails.setCountry(country);
billingDetails.setPhoneNumber(phoneNumber);
billingDetails.setEmailAddress(emailAddress);
billingDetails.setElectronicBillingAddress(electronicBillingAddress);
billingDetails.setCompanyIdentifier(companyIdentifier);
billingDetails.setReferenceNumber(referenceNumber);
billingDetails.setNotes(notes);
return persist(billingDetails);
}
public List<BillingDetails> listByStudent(Student student) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<BillingDetails> criteria = criteriaBuilder.createQuery(BillingDetails.class);
Root<CourseStudent> root = criteria.from(CourseStudent.class);
criteria.select(root.get(CourseStudent_.billingDetails));
criteria.where(criteriaBuilder.equal(root.get(CourseStudent_.student), student));
criteria.groupBy(root.get(CourseStudent_.billingDetails));
return entityManager.createQuery(criteria).getResultList();
}
public BillingDetails updatePersonName(BillingDetails billingDetails, String personName) {
billingDetails.setPersonName(personName);
return persist(billingDetails);
}
public BillingDetails updateCompanyName(BillingDetails billingDetails, String companyName) {
billingDetails.setCompanyName(companyName);
return persist(billingDetails);
}
public BillingDetails updateStreetAddress1(BillingDetails billingDetails, String streetAddress1) {
billingDetails.setStreetAddress1(streetAddress1);
return persist(billingDetails);
}
public BillingDetails updateStreetAddress2(BillingDetails billingDetails, String streetAddress2) {
billingDetails.setStreetAddress2(streetAddress2);
return persist(billingDetails);
}
public BillingDetails updatePostalCode(BillingDetails billingDetails, String postalCode) {
billingDetails.setPostalCode(postalCode);
return persist(billingDetails);
}
public BillingDetails updateCity(BillingDetails billingDetails, String city) {
billingDetails.setCity(city);
return persist(billingDetails);
}
public BillingDetails updateRegion(BillingDetails billingDetails, String region) {
billingDetails.setRegion(region);
return persist(billingDetails);
}
public BillingDetails updateCountry(BillingDetails billingDetails, String country) {
billingDetails.setCountry(country);
return persist(billingDetails);
}
public BillingDetails updatePhoneNumber(BillingDetails billingDetails, String phoneNumber) {
billingDetails.setPhoneNumber(phoneNumber);
return persist(billingDetails);
}
public BillingDetails updateEmailAddress(BillingDetails billingDetails, String emailAddress) {
billingDetails.setEmailAddress(emailAddress);
return persist(billingDetails);
}
public BillingDetails updateCompanyIdentifier(BillingDetails billingDetails, String companyIdentifier) {
billingDetails.setCompanyIdentifier(companyIdentifier);
return persist(billingDetails);
}
public BillingDetails updateReferenceNumber(BillingDetails billingDetails, String referenceNumber) {
billingDetails.setReferenceNumber(referenceNumber);
return persist(billingDetails);
}
public BillingDetails updateNotes(BillingDetails billingDetails, String notes) {
billingDetails.setNotes(notes);
return persist(billingDetails);
}
public BillingDetails updateElectronicBillingAddress(BillingDetails billingDetails, String electronicBillingAddress) {
billingDetails.setElectronicBillingAddress(electronicBillingAddress);
return persist(billingDetails);
}
@Override
public void delete(BillingDetails billingDetails) {
super.delete(billingDetails);
}
}