package org.dicadeveloper.weplantaforest.testsupport;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.dicadeveloper.weplantaforest.abo.Abo;
import org.dicadeveloper.weplantaforest.abo.Abo.Period;
import org.dicadeveloper.weplantaforest.abo.AboRepository;
import org.dicadeveloper.weplantaforest.admin.codes.Team;
import org.dicadeveloper.weplantaforest.admin.codes.TeamRepository;
import org.dicadeveloper.weplantaforest.cart.Cart;
import org.dicadeveloper.weplantaforest.cart.CartItem;
import org.dicadeveloper.weplantaforest.cart.CartRepository;
import org.dicadeveloper.weplantaforest.cart.CartState;
import org.dicadeveloper.weplantaforest.certificate.Certificate;
import org.dicadeveloper.weplantaforest.certificate.CertificateRepository;
import org.dicadeveloper.weplantaforest.code.Code;
import org.dicadeveloper.weplantaforest.code.CodeGenerator;
import org.dicadeveloper.weplantaforest.common.support.Language;
import org.dicadeveloper.weplantaforest.encryption.PasswordEncrypter;
import org.dicadeveloper.weplantaforest.event.Event;
import org.dicadeveloper.weplantaforest.event.EventRepository;
import org.dicadeveloper.weplantaforest.gift.Gift;
import org.dicadeveloper.weplantaforest.gift.Gift.Status;
import org.dicadeveloper.weplantaforest.gift.GiftRepository;
import org.dicadeveloper.weplantaforest.projects.Price;
import org.dicadeveloper.weplantaforest.projects.Price.ScontoType;
import org.dicadeveloper.weplantaforest.projects.PriceRepository;
import org.dicadeveloper.weplantaforest.projects.Project;
import org.dicadeveloper.weplantaforest.projects.ProjectArticle;
import org.dicadeveloper.weplantaforest.projects.ProjectArticleRepository;
import org.dicadeveloper.weplantaforest.projects.ProjectImage;
import org.dicadeveloper.weplantaforest.projects.ProjectImageRepository;
import org.dicadeveloper.weplantaforest.projects.ProjectRepository;
import org.dicadeveloper.weplantaforest.receipt.Receipt;
import org.dicadeveloper.weplantaforest.receipt.ReceiptRepository;
import org.dicadeveloper.weplantaforest.trees.Tree;
import org.dicadeveloper.weplantaforest.trees.TreeRepository;
import org.dicadeveloper.weplantaforest.treetypes.TreeType;
import org.dicadeveloper.weplantaforest.treetypes.TreeTypeRepository;
import org.dicadeveloper.weplantaforest.user.OrganizationType;
import org.dicadeveloper.weplantaforest.user.User;
import org.dicadeveloper.weplantaforest.user.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository("dbInjecter")
public class DbInjecter {
@Autowired
private ProjectRepository _projectRepository;
@Autowired
private UserRepository _userRepository;
@Autowired
private TreeTypeRepository _treeTypeRepository;
@Autowired
private TreeRepository _treeRepository;
@Autowired
private ProjectArticleRepository _projectArticleRepository;
@Autowired
private PriceRepository _priceRepository;
@Autowired
private TeamRepository _teamRepository;
@Autowired
private ProjectImageRepository _projectImageRepository;
@Autowired
private CartRepository _cartRepository;
@Autowired
private CertificateRepository _certificateRepository;
@Autowired
private GiftRepository _giftRepository;
@Autowired
private CodeGenerator _codeGenerator;
@Autowired
private AboRepository _aboRepository;
@Autowired
private PasswordEncrypter _passwordEncrypter;
@Autowired
private ReceiptRepository _receiptRepository;
@Autowired
private EventRepository _eventRepository;
public void injectProject(String pName, String mName, String desc, boolean shopActive, float latitude, float longitude) {
Project project = new Project();
String projectName = pName;
project.setName(projectName);
project.setManager(_userRepository.findByName(mName));
project.setDescription(desc);
project.setImageFileName(projectName);
project.setShopActive(shopActive);
project.setLatitude(latitude);
project.setLongitude(longitude);
_projectRepository.save(project);
}
public User injectUser(String userName) {
User userDto = new User();
userDto.setName(userName);
userDto.setPassword(_passwordEncrypter.encryptPassword(userName));
userDto.setLang(Language.DEUTSCH);
return _userRepository.save(userDto);
}
public void injectUser(String userName, String mail) {
User userDto = new User();
userDto.setName(userName);
userDto.setMail(mail);
userDto.setLang(Language.DEUTSCH);
_userRepository.save(userDto);
}
public void injectUser(String userName, Long regDate) {
User userDto = new User();
userDto.setName(userName);
userDto.setRegDate(regDate);
userDto.setOrganizationType(OrganizationType.PRIVATE);
userDto.setLang(Language.DEUTSCH);
_userRepository.save(userDto);
}
public void injectUser(String userName, Long regDate, OrganizationType organizationType) {
User userDto = new User();
userDto.setName(userName);
userDto.setRegDate(regDate);
userDto.setLastVisit(regDate);
userDto.setOrganizationType(organizationType);
userDto.setLang(Language.DEUTSCH);
_userRepository.save(userDto);
}
public void injectTreeType(String name, String desc, double co2) {
TreeType treeTypeDto = new TreeType();
treeTypeDto.setName(name);
treeTypeDto.setDescription(desc);
treeTypeDto.setAnnualCo2SavingInTons(co2);
_treeTypeRepository.save(treeTypeDto);
}
public Tree injectTree(String treeType, String owner, int amount, long timeOfPlanting) {
Tree tree = new Tree();
tree.setLatitude(0);
tree.setLongitude(0);
tree.setAmount(amount);
tree.setTreeType(_treeTypeRepository.findByName(treeType));
tree.setPlantedOn(new Date(timeOfPlanting).getTime());
tree.setSubmittedOn(new Date(timeOfPlanting).getTime());
tree.setOwner(_userRepository.findByName(owner));
return _treeRepository.save(tree);
}
public Tree injectTreeToProject(String treeType, String owner, int amount, long timeOfPlanting, String pName) {
Tree tree = new Tree();
tree.setLatitude(0);
tree.setLongitude(0);
tree.setAmount(amount);
tree.setTreeType(_treeTypeRepository.findByName(treeType));
tree.setPlantedOn(new Date(timeOfPlanting).getTime());
tree.setSubmittedOn(new Date(timeOfPlanting).getTime());
tree.setOwner(_userRepository.findByName(owner));
tree.setProjectArticle(_projectArticleRepository.findByProjectAndTreeType(_projectRepository.findByName(pName), _treeTypeRepository.findByName(treeType)));
_treeRepository.save(tree);
return tree;
}
public void injectProjectArticle(String treeType, String pName, double priceAmount) {
ProjectArticle plantArticle = new ProjectArticle();
Price price = new Price();
price.setAmount(new BigDecimal(priceAmount));
price.setScontoType(ScontoType.NONE);
_priceRepository.save(price);
plantArticle.setTreeType(_treeTypeRepository.findByName(treeType));
plantArticle.setProject(_projectRepository.findByName(pName));
plantArticle.setPrice(price);
_projectArticleRepository.save(plantArticle);
}
public void injectProjectArticle(String treeType, String pName, long amount, double priceAmount, double priceMarge) {
ProjectArticle plantArticle = new ProjectArticle();
Price price = new Price();
price.setAmount(new BigDecimal(priceAmount));
price.setScontoType(ScontoType.NONE);
price.setMarge(new BigDecimal(priceMarge));
_priceRepository.save(price);
plantArticle.setTreeType(_treeTypeRepository.findByName(treeType));
plantArticle.setProject(_projectRepository.findByName(pName));
plantArticle.setPrice(price);
plantArticle.setAmount(amount);
_projectArticleRepository.save(plantArticle);
}
public Team injectTeam(String tName, String admin) {
Team team = new Team();
team.setName(tName);
team.setAdmin(_userRepository.findByName(admin));
team = _teamRepository.save(team);
addUserToTeam(tName, admin);
return team;
}
public void addUserToTeam(String tName, String userName) {
User user = _userRepository.findByName(userName);
user.setTeam(_teamRepository.findByName(tName));
_userRepository.save(user);
}
public Event injectEvent(String eventName, User user, Team team) {
Event event = new Event();
event.setName(eventName);
event.setUser(user);
event.setTeam(team);
return _eventRepository.save(event);
}
public void injectProjectImage(String imageTitle, String text, String imageFileName, long date, String projectName) {
ProjectImage projectImage = new ProjectImage();
projectImage.setTitle(imageTitle);
projectImage.setDescription(text);
projectImage.setImageFileName(imageFileName);
projectImage.setDate(date);
projectImage.setProject(_projectRepository.findByName(projectName));
_projectImageRepository.save(projectImage);
}
public void injectCart(String buyer, List<Long> treeIds) {
Cart cart = new Cart();
cart.setBuyer(_userRepository.findByName(buyer));
List<Tree> trees = _treeRepository.findTreesByIdIn(treeIds);
for (Tree tree : trees) {
CartItem cartItem = new CartItem();
cartItem.setBasePricePerPiece(new BigDecimal(1.0));
cartItem.setTotalPrice(new BigDecimal(1.0));
cartItem.setTree(tree);
cart.addCartItem(cartItem);
}
_cartRepository.save(cart);
}
public Cart injectCartWithTrees(String buyer, Tree... trees) {
Cart cart = new Cart();
cart.setBuyer(_userRepository.findByName(buyer));
for (Tree tree : trees) {
CartItem cartItem = new CartItem();
cartItem.setBasePricePerPiece(new BigDecimal(1.0));
cartItem.setTotalPrice(new BigDecimal(1.0));
cartItem.setTree(tree);
cart.addCartItem(cartItem);
}
return _cartRepository.save(cart);
}
public void injectCart(String buyer, List<Long> treeIds, long timeStamp) {
Cart cart = new Cart();
cart.setBuyer(_userRepository.findByName(buyer));
cart.setTimeStamp(timeStamp);
cart.setCartState(CartState.VERIFIED);
List<Tree> trees = _treeRepository.findTreesByIdIn(treeIds);
for (Tree tree : trees) {
CartItem cartItem = new CartItem();
cartItem.setTree(tree);
cartItem.setBasePricePerPiece(new BigDecimal(1.0));
double totalPrice = cartItem.getBasePricePerPiece().doubleValue() * cartItem.getTree().getAmount();
cartItem.setTotalPrice(new BigDecimal(totalPrice));
cart.addCartItem(cartItem);
}
_cartRepository.save(cart);
}
public String injectCertificateWithCarts(String creatorName, List<Cart> carts) {
User creator = _userRepository.findByName(creatorName);
Certificate certificate = new Certificate();
certificate.setCreator(creator);
certificate.setText("db injected test certificate");
certificate.generateAndSetNumber(_certificateRepository.countCertificatesByUser(creator.getId()));
certificate.setCarts(carts);
_certificateRepository.save(certificate);
return certificate.getNumber();
}
public String injectCertificateWithTreesForOneCart(String creatorName, Tree... trees) {
Cart cart = injectCartWithTrees(creatorName, trees);
List<Cart> carts = new ArrayList<>();
carts.add(cart);
String certificateString = injectCertificateWithCarts("Adam", carts);
return certificateString;
}
public String injectGiftWithCode(String userName, String recipient, Status giftStatus) {
Gift gift = new Gift();
gift.setConsignor(_userRepository.findByName(userName));
gift.setRecipient(_userRepository.findByName(recipient));
gift = _giftRepository.save(gift);
Code code = _codeGenerator.generate(gift);
gift.setCode(code);
gift.setStatus(giftStatus);
_giftRepository.save(gift);
return gift.getCode().getCode();
}
public Code injectGiftWithCode(String consignor, Status giftStatus) {
Gift gift = new Gift();
gift.setConsignor(_userRepository.findByName(consignor));
gift = _giftRepository.save(gift);
Code code = _codeGenerator.generate(gift);
gift.setCode(code);
gift.setStatus(giftStatus);
_giftRepository.save(gift);
return gift.getCode();
}
public void injectAbo(String owner, boolean isActive, int amount, Period period, long timeStamp) {
Abo abo = new Abo();
abo.setActive(isActive);
abo.setAmount(amount);
abo.setPeriod(period);
abo.setTimeStamp(timeStamp);
abo.setUser(_userRepository.findByName(owner));
_aboRepository.save(abo);
}
public void injectReceipt(String owner, long createdOn, long sentOn, String invoiceNumber) {
Receipt receipt = new Receipt();
receipt.setOwner(_userRepository.findByName(owner));
receipt.setSentOn(sentOn);
receipt.setInvoiceNumber(invoiceNumber);
_receiptRepository.save(receipt);
}
public void injectReceipt(String owner, long createdOn, long sentOn, String invoiceNumber, List<Cart> carts) {
Receipt receipt = new Receipt();
receipt.setOwner(_userRepository.findByName(owner));
receipt.setSentOn(sentOn);
receipt.setInvoiceNumber(invoiceNumber);
receipt.setCarts(carts);
_receiptRepository.save(receipt);
}
}