Implements the possibility to ask for a scholarship for a student
This commit is contained in:
		@ -7,26 +7,42 @@ import org.springframework.web.bind.annotation.PostMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
					import org.springframework.web.bind.annotation.RequestBody;
 | 
				
			||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.ExemptionsRequestRepository;
 | 
					import ovh.herisson.Clyde.Repositories.ExemptionsRequestRepository;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Repositories.ScholarshipRequestRepository;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.ExemptionsRequest;
 | 
					import ovh.herisson.Clyde.Tables.ExemptionsRequest;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.RequestState;
 | 
					import ovh.herisson.Clyde.Tables.RequestState;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Tables.ScholarshipRequest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@RestController
 | 
					@RestController
 | 
				
			||||||
@CrossOrigin(originPatterns = "*", allowCredentials = "true")
 | 
					@CrossOrigin(originPatterns = "*", allowCredentials = "true")
 | 
				
			||||||
public class RequestsController {
 | 
					public class RequestsController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public final ExemptionsRequestRepository err;
 | 
					    public final ExemptionsRequestRepository err;
 | 
				
			||||||
 | 
					    public final ScholarshipRequestRepository srr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public RequestsController(ExemptionsRequestRepository err) {
 | 
					    public RequestsController(ExemptionsRequestRepository err, ScholarshipRequestRepository srr) {
 | 
				
			||||||
        this.err = err;
 | 
					        this.err = err;
 | 
				
			||||||
 | 
					        this.srr = srr;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @PostMapping(value="/exemptionreq")
 | 
					    @PostMapping(value="/exemptionreq")
 | 
				
			||||||
    public ResponseEntity<String> register(@RequestBody ExemptionsRequest exemptionsRequest){
 | 
					    public ResponseEntity<String> register(@RequestBody ExemptionsRequest exemptionsRequest){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //This line ensures that the request is sent in pending state not matter what
 | 
				
			||||||
        exemptionsRequest.setState(RequestState.Pending);
 | 
					        exemptionsRequest.setState(RequestState.Pending);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        err.save(exemptionsRequest);
 | 
					        err.save(exemptionsRequest);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return new ResponseEntity<>(HttpStatus.CREATED);
 | 
					        return new ResponseEntity<>(HttpStatus.CREATED);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PostMapping(value="/scholarshipreq")
 | 
				
			||||||
 | 
					    public ResponseEntity<String> register(@RequestBody ScholarshipRequest scholarshipRequest){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //This line ensures that the request is sent in pending state not matter what
 | 
				
			||||||
 | 
					        scholarshipRequest.setState(RequestState.Pending);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        srr.save(scholarshipRequest);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return new ResponseEntity<>(HttpStatus.CREATED);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					package ovh.herisson.Clyde.Repositories;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.data.repository.CrudRepository;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Tables.ScholarshipRequest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface ScholarshipRequestRepository extends CrudRepository<ScholarshipRequest, Long> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -2,35 +2,39 @@ package ovh.herisson.Clyde.Tables;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import jakarta.persistence.*;
 | 
					import jakarta.persistence.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Date;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Entity
 | 
					@Entity
 | 
				
			||||||
public class ScholarshipRequest {
 | 
					public class ScholarshipRequest {
 | 
				
			||||||
    @Id
 | 
					    @Id
 | 
				
			||||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
					    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
				
			||||||
    private int id;
 | 
					    private long id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @ManyToOne
 | 
					    private long userId;
 | 
				
			||||||
    @JoinColumn(name = "Users")
 | 
					 | 
				
			||||||
    private User user;
 | 
					 | 
				
			||||||
    private RequestState state;
 | 
					    private RequestState state;
 | 
				
			||||||
    private String requestForm;
 | 
					    private Date date;
 | 
				
			||||||
    private int amount;
 | 
					    private int amount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String taxDocUrl;
 | 
				
			||||||
 | 
					    private String residencyDocUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ScholarshipRequest(User user, RequestState state, String requestForm, int amount){
 | 
					    public ScholarshipRequest(long userId, RequestState state, int amount, Date date, String taxDocUrl, String residencyDocUrl){
 | 
				
			||||||
        this.user = user;
 | 
					        this.userId = userId;
 | 
				
			||||||
        this.state = state;
 | 
					        this.state = state;
 | 
				
			||||||
        this.requestForm = requestForm;
 | 
					 | 
				
			||||||
        this.amount = amount;
 | 
					        this.amount = amount;
 | 
				
			||||||
 | 
					        this.date = date;
 | 
				
			||||||
 | 
					        this.taxDocUrl = taxDocUrl;
 | 
				
			||||||
 | 
					        this.residencyDocUrl = residencyDocUrl;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ScholarshipRequest(){}
 | 
					    public ScholarshipRequest(){}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public User getUser() {
 | 
					    public Long getUserId() {
 | 
				
			||||||
        return user;
 | 
					        return userId;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setUser(User user) {
 | 
					    public void setUserId(Long userId) {
 | 
				
			||||||
        this.user = user;
 | 
					        this.userId = userId;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public RequestState getState() {
 | 
					    public RequestState getState() {
 | 
				
			||||||
@ -41,14 +45,6 @@ public class ScholarshipRequest {
 | 
				
			|||||||
        this.state = state;
 | 
					        this.state = state;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getRequestForm() {
 | 
					 | 
				
			||||||
        return requestForm;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void setRequestForm(String requestForm) {
 | 
					 | 
				
			||||||
        this.requestForm = requestForm;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public int getAmount() {
 | 
					    public int getAmount() {
 | 
				
			||||||
        return amount;
 | 
					        return amount;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -56,4 +52,32 @@ public class ScholarshipRequest {
 | 
				
			|||||||
    public void setAmount(int amount) {
 | 
					    public void setAmount(int amount) {
 | 
				
			||||||
        this.amount = amount;
 | 
					        this.amount = amount;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Date getDate() {
 | 
				
			||||||
 | 
					        return date;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setDate(Date date) {
 | 
				
			||||||
 | 
					        this.date = date;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public long getId() {
 | 
				
			||||||
 | 
					        return id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getResidencyDocUrl() {
 | 
				
			||||||
 | 
					        return residencyDocUrl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setResidencyDocUrl(String residencyDocUrl) {
 | 
				
			||||||
 | 
					        this.residencyDocUrl = residencyDocUrl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getTaxDocUrl() {
 | 
				
			||||||
 | 
					        return taxDocUrl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setTaxDocUrl(String taxDocUrl) {
 | 
				
			||||||
 | 
					        this.taxDocUrl = taxDocUrl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -20,11 +20,6 @@ async function updateCourseList(){
 | 
				
			|||||||
  courseslist.value = await getcurriculum(selectedCurriculum.value.curriculumId)
 | 
					  courseslist.value = await getcurriculum(selectedCurriculum.value.curriculumId)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function uploadfileandgetpath(file, type){
 | 
					 | 
				
			||||||
  const a = await uploadFile(file, type);
 | 
					 | 
				
			||||||
  exemptReq.justifDocument = a.url
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async function postExemptionRequest(file, type){
 | 
					async function postExemptionRequest(file, type){
 | 
				
			||||||
  const a = await uploadFile(file, type);
 | 
					  const a = await uploadFile(file, type);
 | 
				
			||||||
  exemptReq.justifDocument = a.url
 | 
					  exemptReq.justifDocument = a.url
 | 
				
			||||||
 | 
				
			|||||||
@ -4,10 +4,11 @@
 | 
				
			|||||||
  import {getSelfCurriculum, getAllCurriculums, getSomeonesCurriculumList} from '../rest/curriculum.js'
 | 
					  import {getSelfCurriculum, getAllCurriculums, getSomeonesCurriculumList} from '../rest/curriculum.js'
 | 
				
			||||||
  import {getCourses} from "../rest/courses.js"
 | 
					  import {getCourses} from "../rest/courses.js"
 | 
				
			||||||
  import i18n from "@/i18n.js"
 | 
					  import i18n from "@/i18n.js"
 | 
				
			||||||
  import { uploadProfilePicture } from '@/rest/uploads.js'
 | 
					  import {uploadFile, uploadProfilePicture} from '@/rest/uploads.js'
 | 
				
			||||||
  import CourseList from "@/Apps/CourseList.vue";
 | 
					  import CourseList from "@/Apps/CourseList.vue";
 | 
				
			||||||
  import {editMinerval, getCurrentMinerval} from "@/rest/minerval.js";
 | 
					  import {editMinerval, getCurrentMinerval} from "@/rest/minerval.js";
 | 
				
			||||||
  import {postPayment} from "@/rest/payment.js";
 | 
					  import {postPayment} from "@/rest/payment.js";
 | 
				
			||||||
 | 
					  import {createScholarshipRequest} from "@/rest/requests.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const user = ref(await getSelf());
 | 
					  const user = ref(await getSelf());
 | 
				
			||||||
  const UserCurriculum = ref(""); 
 | 
					  const UserCurriculum = ref(""); 
 | 
				
			||||||
@ -27,6 +28,8 @@
 | 
				
			|||||||
  const courseslist = ref(false);
 | 
					  const courseslist = ref(false);
 | 
				
			||||||
  const minerval = ref(false);
 | 
					  const minerval = ref(false);
 | 
				
			||||||
  const paymentPage = ref(false);
 | 
					  const paymentPage = ref(false);
 | 
				
			||||||
 | 
					  const scholarship = ref(false);
 | 
				
			||||||
 | 
					  const scholarshipinfos = ref(false);
 | 
				
			||||||
  const pattern = {
 | 
					  const pattern = {
 | 
				
			||||||
    profilPictureUrl:null,
 | 
					    profilPictureUrl:null,
 | 
				
			||||||
    email:null,
 | 
					    email:null,
 | 
				
			||||||
@ -50,6 +53,17 @@
 | 
				
			|||||||
    expDate:null,
 | 
					    expDate:null,
 | 
				
			||||||
    amount: null
 | 
					    amount: null
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //Used to modelize a scholarship request
 | 
				
			||||||
 | 
					  const scholarshipData=reactive({
 | 
				
			||||||
 | 
					    userId: user.value.regNo,
 | 
				
			||||||
 | 
					    state:null,
 | 
				
			||||||
 | 
					    date:null,
 | 
				
			||||||
 | 
					    amount:0,
 | 
				
			||||||
 | 
					    taxDocUrl : "",
 | 
				
			||||||
 | 
					    residencyDocUrl : ""
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const paymentAmount = ref(0);
 | 
					  const paymentAmount = ref(0);
 | 
				
			||||||
  let toModify= Object.assign({}, pattern);
 | 
					  let toModify= Object.assign({}, pattern);
 | 
				
			||||||
  let personnalInfos =  Object.assign({}, patternInfos);
 | 
					  let personnalInfos =  Object.assign({}, patternInfos);
 | 
				
			||||||
@ -121,6 +135,18 @@
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    return actualCurriculumList
 | 
					    return actualCurriculumList
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async function postScholarshipRequest(file1, type1, file2, type2){
 | 
				
			||||||
 | 
					    const a = await uploadFile(file1, type1)
 | 
				
			||||||
 | 
					    scholarshipData.taxDocUrl =  a.url;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const b = await uploadFile(file2, type2)
 | 
				
			||||||
 | 
					    scholarshipData.residencyDocUrl = b.url;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    scholarshipData.date = Date.now();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    await createScholarshipRequest(scholarshipData)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@ -130,7 +156,7 @@
 | 
				
			|||||||
      <img class="subContainter" :src=getPP()>
 | 
					      <img class="subContainter" :src=getPP()>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
      <div class="globalInfos">
 | 
					      <div class="globalInfos">
 | 
				
			||||||
        <div v-if="modif==false && curric==false && reg==false && minerval==false && paymentPage == false" class="infosContainer">
 | 
					        <div v-if="modif==false && curric==false && reg==false && minerval==false && paymentPage == false && scholarship==false" class="infosContainer">
 | 
				
			||||||
          <div>
 | 
					          <div>
 | 
				
			||||||
            {{user.firstName}} {{user.lastName}}   
 | 
					            {{user.firstName}} {{user.lastName}}   
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
@ -171,6 +197,30 @@
 | 
				
			|||||||
          <div v-else>
 | 
					          <div v-else>
 | 
				
			||||||
            Payment : School fees have already been paid this year
 | 
					            Payment : School fees have already been paid this year
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div>
 | 
				
			||||||
 | 
					            <button @click="scholarship=!scholarship; minerval=!minerval">Ask for a scholarship</button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div v-else-if="scholarship && !scholarshipinfos" class="infosContainer">
 | 
				
			||||||
 | 
					          <p>Please upload the required documents</p>
 | 
				
			||||||
 | 
					          <div>
 | 
				
			||||||
 | 
					            Tax justification document :
 | 
				
			||||||
 | 
					            <input type="file" @change="scholarshipData.taxDocUrl = $event.target.files">
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div>
 | 
				
			||||||
 | 
					            Residency justification document :
 | 
				
			||||||
 | 
					            <input type="file" style="margin-top:2%" @change="scholarshipData.residencyDocUrl = $event.target.files">
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <button style="margin-top: 5%" @click="scholarshipinfos = !scholarshipinfos;postScholarshipRequest(scholarshipData.taxDocUrl, 'JustificationDocument',scholarshipData.residencyDocUrl, 'JustificationDocument');">Submit scholarship request</button>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div v-else-if="scholarship && scholarshipinfos" class="infosContainer">
 | 
				
			||||||
 | 
					          <div>
 | 
				
			||||||
 | 
					            Your request has been sent to the inscription service you will get notified when
 | 
				
			||||||
 | 
					            the request is reviewed.
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <button @click="scholarshipinfos=!scholarshipinfos; scholarship=!scholarship">
 | 
				
			||||||
 | 
					            Go back to profile
 | 
				
			||||||
 | 
					          </button>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div v-else-if="paymentPage" class="infosContainer">
 | 
					        <div v-else-if="paymentPage" class="infosContainer">
 | 
				
			||||||
          Proceed to payment of {{paymentAmount}}€
 | 
					          Proceed to payment of {{paymentAmount}}€
 | 
				
			||||||
@ -256,7 +306,7 @@
 | 
				
			|||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <div v-if="modif==false && curric==false && reg==false && minerval==false"class="moreInfos">
 | 
					      <div v-if="modif==false && curric==false && reg==false && minerval==false && scholarship == false"class="moreInfos">
 | 
				
			||||||
          <div class = "oldcursus">
 | 
					          <div class = "oldcursus">
 | 
				
			||||||
            <div class="listTitle">
 | 
					            <div class="listTitle">
 | 
				
			||||||
              Anciens Cursus
 | 
					              Anciens Cursus
 | 
				
			||||||
 | 
				
			|||||||
@ -2,4 +2,8 @@ import {restPost} from "@/rest/restConsumer.js";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export async function createExemptionsRequest(exempReq){
 | 
					export async function createExemptionsRequest(exempReq){
 | 
				
			||||||
    return restPost("/exemptionreq", exempReq)
 | 
					    return restPost("/exemptionreq", exempReq)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export async function createScholarshipRequest(scholReq){
 | 
				
			||||||
 | 
					    return restPost("/scholarshipreq", scholReq)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user