Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/evaluation #149

Open
wants to merge 13 commits into
base: develop
Choose a base branch
from
Prev Previous commit
Next Next commit
layout adjustments
  • Loading branch information
TaisHryssai committed May 26, 2024
commit 4d5e1f190f9fb9c65f32d2a5ed09a831ea340dbe
Original file line number Diff line number Diff line change
@@ -18,6 +18,11 @@
import br.edu.utfpr.servicebook.util.TemplateUtil;
import com.cloudinary.Cloudinary;
import com.cloudinary.utils.ObjectUtils;
import com.mercadopago.client.common.AddressRequest;
import com.mercadopago.client.common.IdentificationRequest;
import com.mercadopago.client.common.PhoneRequest;
import com.mercadopago.client.preference.*;
import com.mercadopago.resources.preference.Preference;
import org.apache.batik.transcoder.TranscoderException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,6 +43,7 @@
import javax.xml.transform.TransformerException;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
@@ -47,6 +53,7 @@
import com.google.zxing.WriterException;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.fop.configuration.ConfigurationException;
import com.mercadopago.MercadoPagoConfig;

@RequestMapping("/minha-conta/cliente")
@Controller
@@ -258,6 +265,106 @@ public ModelAndView showDetailsRequest(@PathVariable Optional<Long> id) throws E
})
.collect(Collectors.toList());

MercadoPagoConfig.setAccessToken("TEST-2738533774159236-052518-f4e09de99516f8d7b2adb21186313d1b-494777183");
PreferenceClient client = new PreferenceClient();

PreferenceItemRequest itemRequest =
PreferenceItemRequest.builder()
.id("1234")
.title("Dummy Title")
.description("Dummy description")
.pictureUrl("http://www.myapp.com/myimage.jpg")
.categoryId("car_electronics")
.quantity(1)
.currencyId("BRL")
.unitPrice(new BigDecimal("10"))
.build();

List<PreferenceItemRequest> items = new ArrayList<>();
items.add(itemRequest);

PreferenceFreeMethodRequest freeMethod =
PreferenceFreeMethodRequest.builder()
.id(1L).build();
List<PreferenceFreeMethodRequest> freeMethodList = new ArrayList<>();
freeMethodList.add(freeMethod);

List<PreferencePaymentTypeRequest> excludedPaymentTypes = new ArrayList<>();
excludedPaymentTypes.add(PreferencePaymentTypeRequest.builder().id("ticket").build());

List<PreferencePaymentMethodRequest> excludedPaymentMethods = new ArrayList<>();
excludedPaymentMethods.add(PreferencePaymentMethodRequest.builder().id("").build());

PreferenceRequest preferenceRequest = PreferenceRequest.builder()
.backUrls(
PreferenceBackUrlsRequest.builder()
.success("http://test.com/success")
.failure("http://test.com/failure")
.pending("http://test.com/pending")
.build())
.differentialPricing(
PreferenceDifferentialPricingRequest.builder()
.id(1L)
.build())
.expires(false)
.items(items)
.marketplaceFee(new BigDecimal("0"))
.payer(
PreferencePayerRequest.builder()
.name("Test")
.surname("User")
.email("your_test_email@example.com")
.phone(PhoneRequest.builder().areaCode("11").number("4444-4444").build())
.identification(
IdentificationRequest.builder().type("CPF").number("19119119100").build())
.address(
AddressRequest.builder()
.zipCode("06233200")
.streetName("Street")
.streetNumber("123")
.build())
.build())
.additionalInfo("Discount: 12.00")
.autoReturn("all")
.binaryMode(true)
.externalReference("1643827245")
.marketplace("marketplace")
.notificationUrl("http://notificationurl.com")
.operationType("regular_payment")
.paymentMethods(
PreferencePaymentMethodsRequest.builder()
.defaultPaymentMethodId("master")
.excludedPaymentTypes(excludedPaymentTypes)
.excludedPaymentMethods(excludedPaymentMethods)
.installments(5)
.defaultInstallments(1)
.build())
.shipments(
PreferenceShipmentsRequest.builder()
.mode("custom")
.localPickup(false)
.defaultShippingMethod(null)
.freeMethods(freeMethodList)
.cost(BigDecimal.TEN)
.freeShipping(false)
.dimensions("10x10x20,500")
.receiverAddress(
PreferenceReceiverAddressRequest.builder()
.zipCode("06000000")
.streetNumber("123")
.streetName("Street")
.floor("12")
.apartment("120A")
.build())
.build())
.statementDescriptor("Test Store")
.build();

Preference preference = client.create(preferenceRequest);


System.out.println("AAAAAAA");
System.out.println(preference.getClientId());
mv.addObject("candidates", jobCandidatesDTOs);
mv.addObject("expertise", expertiseDTO);
mv.addObject("jobRequest", jobDTO);
Original file line number Diff line number Diff line change
@@ -116,6 +116,7 @@ public int getValue(){
@GetMapping
@PermitAll
public String showWizard(@RequestParam(value = "passo", required = false, defaultValue = "1") Long step,
@RequestParam(value = "especialidade", required = false, defaultValue = "0") Long expertiseId,
HttpSession httpSession,
Model model) throws Exception {
log.debug("Mostrando o passo {}", step);
@@ -133,6 +134,11 @@ public String showWizard(@RequestParam(value = "passo", required = false, defaul
JobRequestDTO dto = wizardSessionUtil.getWizardState(httpSession, JobRequestDTO.class, WizardSessionUtil.KEY_WIZARD_JOB_REQUEST);
model.addAttribute("dto", dto);

if(expertiseId != 0){
JobRequestDTO sessionDTO = wizardSessionUtil.getWizardState(httpSession, JobRequestDTO.class, WizardSessionUtil.KEY_WIZARD_JOB_REQUEST);
sessionDTO.setExpertiseId(expertiseId);
}

if(step == 1L){
List<Expertise> expertise = expertiseService.findAll();
List<ExpertiseDTO> expertiseDTOs = expertise.stream()
@@ -182,7 +188,6 @@ public String saveFormRequestedJob(HttpSession httpSession, @Validated(JobReques
@PermitAll
public String saveFormDateJob(HttpSession httpSession, @Validated(JobRequestDTO.RequestExpirationGroupValidation.class) JobRequestDTO dto, BindingResult errors, RedirectAttributes redirectAttributes, Model model) throws Exception {


if(errors.hasErrors()){
model.addAttribute("dto", dto);
model.addAttribute("errors", errors.getAllErrors());
@@ -225,7 +230,7 @@ public String saveFormDateJob(HttpSession httpSession, @Validated(JobRequestDTO.
}
sessionDTO.setDateTarget(DateUtil.getToday());
log.debug("Passo 2 {}", sessionDTO);
return "redirect:/requisicoes?passo=3";
return "redirect:/requisicoes?passo=4";

}
@PostMapping("/passo-3")
@@ -300,7 +305,7 @@ public String saveFormImagePath(HttpSession httpSession, RedirectAttributes redi
sessionDTO.setImageSession((String)data.get("url"));
log.debug("Passo 5 {}", sessionDTO);

return "redirect:/requisicoes?passo=8";
return "redirect:/requisicoes?passo=7";
} else {
return "redirect:/requisicoes/passo=5";
}
Original file line number Diff line number Diff line change
@@ -172,15 +172,23 @@ protected ModelAndView showSearchResults(
.map(s -> categoryMapper.toDto(s))
.collect(Collectors.toList());

PaginationDTO paginationDTO = paginationUtil.getPaginationDTO(professionals, "/profissionais/busca?termo-da-busca=" + searchService);
Page<Individual> professionalsByExpertise = individualService.findDistinctByExpertiseAndCategoryPagination(expertise.get(), page, size);

Page<Individual> listProfessionals = individualService.listByExpertiseAndCategory(expertise.get(), category.get(), page, size);

List<ProfessionalSearchItemDTO> professionalSearchItemDTOS2 = professionalsByExpertise.stream()
.map(s -> individualMapper.toSearchItemDto(s, individualService.getExpertises(s)))
.collect(Collectors.toList());

List<Individual> professionals1 = individualService.findAllIndividualsAutonomosByService(expertise.get().getId(), page, size);

List<ProfessionalSearchItemDTO> professionalSearchItemDTOS1 = professionals1.stream()
.map(s -> individualMapper.toSearchItemDto(s, individualService.getExpertises(s)))
.collect(Collectors.toList());

mv.addObject("professionals", professionals1);
PaginationDTO paginationDTO = paginationUtil.getPaginationDTO(professionalServiceOfferings, "/profissionais/busca?termo-da-busca=" + searchService);

mv.addObject("professionals", professionalSearchItemDTOS2);
mv.addObject("categoryDTOs", categoryDTOs);
mv.addObject("pagination", paginationDTO);
mv.addObject("isParam", true);
@@ -191,6 +199,7 @@ protected ModelAndView showSearchResults(
mv.addObject("dto_service", service.get());

mv.addObject("professionalServiceOfferingDTOS", professionalServiceOfferingDTOS);
mv.addObject("count_results", professionalServiceOfferingDTOS.size());
}

return mv;
@@ -258,4 +267,66 @@ protected ModelAndView showProfessionalDetailsToVisitors(@PathVariable("id") Lon
}
return mv;
}

@GetMapping("/detalhes/{id}/servico/{service_id}")
@PermitAll
protected ModelAndView showProfessionalDetailsAndServiceToVisitors(@PathVariable("id") Long id, @PathVariable("service_id") Long service_id) throws Exception {

Optional<User> oProfessional = userService.findById(id);

if (!oProfessional.isPresent()) {
throw new EntityNotFoundException("Profissional não encontrado.");
}

Optional<Service> oService = serviceService.findById(service_id);

if (!oService.isPresent()) {
throw new EntityNotFoundException("Serviço não encontrado.");
}

//cliente autenticado, caso esteja logado
Optional<User> oClientAuthenticated = (userService.findByEmail(authentication.getEmail()));

//profissional requisitado
UserDTO professionalDTO = userMapper.toDto(oProfessional.get());

//especialidades do profissional requisitado
List<ExpertiseDTO> expertisesDTO = userService.getExpertiseDTOs(oProfessional.get());

List<ProfessionalExpertise> professionalExpertises = professionalExpertiseService.findByProfessional(oProfessional.get());

//serviços por especialidade
Map<ProfessionalExpertise, List<ProfessionalServiceOfferingDTO>> servicesByExpertise = new HashMap<>();
for (ProfessionalExpertise pe : professionalExpertises) {
List<ProfessionalServiceOffering> professionalServiceOfferings = professionalServiceOfferingService.findProfessionalServiceOfferingByUserAndExpertise(oProfessional.get().getId(), pe.getExpertise().getId());

if (professionalServiceOfferings.isEmpty()) {
continue;
}

//transforma para DTO
List<ProfessionalServiceOfferingDTO> professionalServiceOfferingsDTO = professionalServiceOfferings.stream()
.map(service -> professionalServiceOfferingMapper.toDTO(service))
.collect(Collectors.toList());

servicesByExpertise.put(pe, professionalServiceOfferingsDTO);
}

ModelAndView mv = new ModelAndView("visitor/professional-details");
mv.addObject("professional", professionalDTO);
mv.addObject("professionalExpertises", expertisesDTO);
mv.addObject("logged", oClientAuthenticated.isPresent());
mv.addObject("servicesByExpertise", servicesByExpertise);
mv.addObject("service", oService.get());

//se o cliente está logado, mostra se ele segue o profissional
if (oClientAuthenticated.isPresent()) {
List<Follows> follows = followsService.findFollowProfessionalClient(oProfessional.get(), oClientAuthenticated.get());
boolean isFollow = !follows.isEmpty();
UserDTO clientDTO = userMapper.toDto(oClientAuthenticated.get());
mv.addObject("isFollow", isFollow);
mv.addObject("client", clientDTO);
}
return mv;
}
}
Original file line number Diff line number Diff line change
@@ -4,6 +4,8 @@
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;

@Data
@NoArgsConstructor
@AllArgsConstructor
@@ -13,5 +15,6 @@ public class JobContractedFullDTO {
private String comments;
private int rating;
private JobRequestFullDTO jobRequest;
private String todoDate;

}
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.multipart.MultipartFile;

import java.io.Serializable;

@@ -21,5 +22,6 @@ public class JobRequestDetailsDTO implements Serializable {
private Long totalCandidates;
private String textualDate;
private Long amountOfCandidates;
private MultipartFile imageFile;

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package br.edu.utfpr.servicebook.model.dto;

import br.edu.utfpr.servicebook.model.entity.JobImages;
import br.edu.utfpr.servicebook.model.entity.User;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.multipart.MultipartFile;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

@Data
@NoArgsConstructor
@@ -21,7 +26,11 @@ public class JobRequestFullDTO implements Serializable {
private Long totalCandidates;
private String textualDate;
private Long amountOfCandidates;
private User user;

public String status;
private MultipartFile imageFile;
private Set<JobImages> jobImages = new HashSet<>();


}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package br.edu.utfpr.servicebook.model.dto;

import br.edu.utfpr.servicebook.model.entity.Expertise;
import br.edu.utfpr.servicebook.model.entity.Individual;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -20,10 +22,11 @@ public class ProfessionalSearchItemDTO extends UserDTO {
private int rating;

private int denounceAmount;

public String getOnlyNumbersFromPhone() {
return getPhoneNumber().replaceAll("[^0-9]", "");
}

public List<ExpertiseDTO> expertises;

public Expertise expertise;
}
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@

import javax.persistence.*;

import br.edu.utfpr.servicebook.model.dto.ClientMinDTO;
import lombok.*;

@Data
@@ -39,7 +40,7 @@ public enum Status {
@ManyToOne
@JoinColumn(name = "client_id")
private User user;

@ManyToOne
@JoinColumn(name = "expertise_id")
private Expertise expertise;
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@
* Ele pode ter várias customizações para um mesmo serviço cadastrado pelo Administrador.
*/
@Data
@Table(name = "professional_service_offerings")
@Table(name = "professional_service_offerings")
@NoArgsConstructor
@Entity
public class ProfessionalServiceOffering {
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@


import br.edu.utfpr.servicebook.model.dto.*;
import br.edu.utfpr.servicebook.model.entity.Expertise;
import br.edu.utfpr.servicebook.model.entity.Individual;
import br.edu.utfpr.servicebook.util.UserTemplateInfo;
import org.modelmapper.ModelMapper;
Loading