Add the actual in UserCurriculum
Rework the unregister procedure Add ChangeCurriculumRequest Add the changeCurriculumRequest submit
This commit is contained in:
		@ -4,9 +4,12 @@ import org.springframework.http.HttpStatus;
 | 
			
		||||
import org.springframework.http.ResponseEntity;
 | 
			
		||||
import org.springframework.web.bind.annotation.*;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.CourseRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.CurriculumRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.Inscription.ChangeCurriculumRequestRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.Inscription.ExemptionsRequestRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.Inscription.ScholarshipRequestRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.Inscription.UnregisterRequestRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.UserCurriculumRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.UserRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 | 
			
		||||
import ovh.herisson.Clyde.Services.AuthenticatorService;
 | 
			
		||||
@ -31,8 +34,12 @@ public class RequestsController {
 | 
			
		||||
    public final UnregisterRequestRepository unregisterRequestRepository;
 | 
			
		||||
    public final CourseRepository courseRepository;
 | 
			
		||||
    public final UserService userService;
 | 
			
		||||
    public final UserCurriculumRepository userCurriculumRepository;
 | 
			
		||||
    public final CurriculumRepository curriculumRepository;
 | 
			
		||||
 | 
			
		||||
    public RequestsController(ExemptionsRequestRepository err, ScholarshipRequestRepository srr, UserRepository userRepository, AuthenticatorService authServ, UnregisterRequestRepository unregisterRequestRepository, CourseRepository courseRepository, UserService userService) {
 | 
			
		||||
    public final ChangeCurriculumRequestRepository changeCurriculumRequestRepository;
 | 
			
		||||
 | 
			
		||||
    public RequestsController(ExemptionsRequestRepository err, ScholarshipRequestRepository srr, UserRepository userRepository, AuthenticatorService authServ, UnregisterRequestRepository unregisterRequestRepository, CourseRepository courseRepository, UserService userService, UserCurriculumRepository userCurriculumRepository, CurriculumRepository curriculumRepository, ChangeCurriculumRequestRepository changeCurriculumRequestRepository) {
 | 
			
		||||
        this.err = err;
 | 
			
		||||
        this.srr = srr;
 | 
			
		||||
        this.userRepository = userRepository;
 | 
			
		||||
@ -40,6 +47,9 @@ public class RequestsController {
 | 
			
		||||
        this.unregisterRequestRepository = unregisterRequestRepository;
 | 
			
		||||
        this.courseRepository = courseRepository;
 | 
			
		||||
        this.userService = userService;
 | 
			
		||||
        this.userCurriculumRepository = userCurriculumRepository;
 | 
			
		||||
        this.curriculumRepository = curriculumRepository;
 | 
			
		||||
        this.changeCurriculumRequestRepository = changeCurriculumRequestRepository;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PostMapping(value="/exemptionreq")
 | 
			
		||||
@ -135,14 +145,33 @@ public class RequestsController {
 | 
			
		||||
    @PatchMapping(value = "/unregister/{id}/{newstate}")
 | 
			
		||||
    public ResponseEntity<String> pathUnregReq(@PathVariable long id, @PathVariable RequestState newstate){
 | 
			
		||||
        UnregisterRequest unregisterRequest = unregisterRequestRepository.findById(id);
 | 
			
		||||
 | 
			
		||||
        User u = userRepository.findById(unregisterRequest.getRegNo());
 | 
			
		||||
        unregisterRequest.setState(newstate);
 | 
			
		||||
 | 
			
		||||
        if (newstate == RequestState.Accepted){
 | 
			
		||||
            userService.delete(userRepository.findById(unregisterRequest.getRegNo()));
 | 
			
		||||
            ArrayList<UserCurriculum> userCurricula = userCurriculumRepository.findByUserOrderByCurriculum(u);
 | 
			
		||||
            for (int i = 0; i < userCurricula.size(); i++){
 | 
			
		||||
                userCurricula.get(i).setActual(false);
 | 
			
		||||
            }
 | 
			
		||||
            userCurriculumRepository.saveAll(userCurricula);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        unregisterRequestRepository.save(unregisterRequest);
 | 
			
		||||
        return new ResponseEntity<>(HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/changecurriculumreq")
 | 
			
		||||
    public ResponseEntity<String> addChangeCurrReq(@RequestBody Map<String,Object> reqInfos){
 | 
			
		||||
        User user = userRepository.findById((Integer) reqInfos.get("userId"));
 | 
			
		||||
 | 
			
		||||
        Curriculum actualCurriculum = curriculumRepository.findById((Integer) reqInfos.get("actualcursus"));
 | 
			
		||||
 | 
			
		||||
        Curriculum destinationCurriculum = curriculumRepository.findById((Integer) reqInfos.get("newcursus"));
 | 
			
		||||
 | 
			
		||||
        ChangeCurriculumRequest changeCurriculumRequest = new ChangeCurriculumRequest(user, actualCurriculum, destinationCurriculum, new Date(), RequestState.Pending);
 | 
			
		||||
 | 
			
		||||
        changeCurriculumRequestRepository.save(changeCurriculumRequest);
 | 
			
		||||
 | 
			
		||||
        return new ResponseEntity<>(HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -93,12 +93,12 @@ public class MockController {
 | 
			
		||||
        curriculumService.save(masterinfo1);
 | 
			
		||||
        curriculumService.save(masterinfo2);
 | 
			
		||||
 | 
			
		||||
        ucr.save(new UserCurriculum(joe, infoBab1, 2022));
 | 
			
		||||
        ucr.save(new UserCurriculum(joe, chemistryBab1, 2023));
 | 
			
		||||
        ucr.save(new UserCurriculum(joe, infoBab1, 2023));
 | 
			
		||||
        ucr.save(new UserCurriculum(joe, psychologyBab1, 2020));
 | 
			
		||||
        ucr.save(new UserCurriculum(popo, infoBab1, 2022));
 | 
			
		||||
        ucr.save(new UserCurriculum(popo, infoBab2, 2023));
 | 
			
		||||
        ucr.save(new UserCurriculum(joe, infoBab1, 2022, false));
 | 
			
		||||
        ucr.save(new UserCurriculum(joe, chemistryBab1, 2023, true));
 | 
			
		||||
        ucr.save(new UserCurriculum(joe, infoBab1, 2023, true));
 | 
			
		||||
        ucr.save(new UserCurriculum(joe, psychologyBab1, 2020, false));
 | 
			
		||||
        ucr.save(new UserCurriculum(popo, infoBab1, 2022, false));
 | 
			
		||||
        ucr.save(new UserCurriculum(popo, infoBab2, 2023, true));
 | 
			
		||||
 | 
			
		||||
        Course progra1 = new Course(5,"Programmation et algorithmique 1",joke);
 | 
			
		||||
        Course chemistry1 = new Course(12, "Thermochimie",joke);
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,7 @@
 | 
			
		||||
package ovh.herisson.Clyde.Repositories.Inscription;
 | 
			
		||||
 | 
			
		||||
import org.springframework.data.repository.CrudRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.ChangeCurriculumRequest;
 | 
			
		||||
 | 
			
		||||
public interface ChangeCurriculumRequestRepository extends CrudRepository<ChangeCurriculumRequest, Long> {
 | 
			
		||||
}
 | 
			
		||||
@ -12,6 +12,7 @@ import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Inscription.Minerval;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
 | 
			
		||||
@Service
 | 
			
		||||
public class InscriptionService {
 | 
			
		||||
@ -85,7 +86,8 @@ public class InscriptionService {
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        userRepo.save(userFromRequest);
 | 
			
		||||
        userCurriculumRepo.save(new UserCurriculum(userFromRequest, curriculumRepo.findById(inscrRequest.getCurriculumId()),0));
 | 
			
		||||
        Calendar c = Calendar.getInstance();
 | 
			
		||||
        userCurriculumRepo.save(new UserCurriculum(userFromRequest, curriculumRepo.findById(inscrRequest.getCurriculumId()),c.get(Calendar.YEAR), true));
 | 
			
		||||
 | 
			
		||||
        //Create a minerval for the new student
 | 
			
		||||
        Minerval minerval = new Minerval(userFromRequest.getRegNo(), 0, 852, 2023);
 | 
			
		||||
 | 
			
		||||
@ -35,11 +35,12 @@ public class UserCurriculumService {
 | 
			
		||||
            HashMap<String, Object> element = new HashMap<>();
 | 
			
		||||
            Curriculum c = list.get(i).getCurriculum();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            element.put("curriculumId", c.getCurriculumId());
 | 
			
		||||
            element.put("year", c.getYear());
 | 
			
		||||
            element.put("option", c.getOption());
 | 
			
		||||
            element.put("dateyear", list.get(i).getYear());
 | 
			
		||||
            element.put("actual", list.get(i).isActual());
 | 
			
		||||
 | 
			
		||||
            curriculumlist.add(element);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,83 @@
 | 
			
		||||
package ovh.herisson.Clyde.Tables;
 | 
			
		||||
 | 
			
		||||
import jakarta.persistence.*;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
public class ChangeCurriculumRequest {
 | 
			
		||||
    @Id
 | 
			
		||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
    private int id;
 | 
			
		||||
 | 
			
		||||
    @ManyToOne
 | 
			
		||||
    @JoinColumn(name="Users")
 | 
			
		||||
    private User user;
 | 
			
		||||
 | 
			
		||||
    @ManyToOne
 | 
			
		||||
    @JoinColumn(name = "ActualCurriculum")
 | 
			
		||||
    private Curriculum actualCurriculum;
 | 
			
		||||
 | 
			
		||||
    @ManyToOne
 | 
			
		||||
    @JoinColumn(name = "DestCurriculum")
 | 
			
		||||
    private Curriculum destinationCurriculum;
 | 
			
		||||
 | 
			
		||||
    private Date date;
 | 
			
		||||
 | 
			
		||||
    private RequestState state;
 | 
			
		||||
 | 
			
		||||
    public ChangeCurriculumRequest(){}
 | 
			
		||||
 | 
			
		||||
    public ChangeCurriculumRequest(User user, Curriculum actualCurriculum, Curriculum destinationCurriculum, Date date, RequestState state){
 | 
			
		||||
        this.user = user;
 | 
			
		||||
        this.actualCurriculum = actualCurriculum;
 | 
			
		||||
        this.destinationCurriculum = destinationCurriculum;
 | 
			
		||||
        this.date = date;
 | 
			
		||||
        this.state = state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public User getUser() {
 | 
			
		||||
        return user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUser(User user) {
 | 
			
		||||
        this.user = user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public Curriculum getActualCurriculum() {
 | 
			
		||||
        return actualCurriculum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setActualCurriculum(Curriculum actualCurriculum) {
 | 
			
		||||
        this.actualCurriculum = actualCurriculum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Curriculum getDestinationCurriculum() {
 | 
			
		||||
        return destinationCurriculum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDestinationCurriculum(Curriculum destinationCurriculum) {
 | 
			
		||||
        this.destinationCurriculum = destinationCurriculum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDate(Date date) {
 | 
			
		||||
        this.date = date;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Date getDate() {
 | 
			
		||||
        return date;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public RequestState getState() {
 | 
			
		||||
        return state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setState(RequestState state) {
 | 
			
		||||
        this.state = state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getId() {
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -23,10 +23,14 @@ public class UserCurriculum {
 | 
			
		||||
 | 
			
		||||
    private int year;
 | 
			
		||||
 | 
			
		||||
    public UserCurriculum(User user, Curriculum curriculum, int year){
 | 
			
		||||
    //True if the user has that curriculum at the moment false if not
 | 
			
		||||
    private boolean actual;
 | 
			
		||||
 | 
			
		||||
    public UserCurriculum(User user, Curriculum curriculum, int year, boolean actual){
 | 
			
		||||
        this.user = user;
 | 
			
		||||
        this.curriculum = curriculum;
 | 
			
		||||
        this.year = year;
 | 
			
		||||
        this.actual = actual;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public UserCurriculum() {}
 | 
			
		||||
@ -58,4 +62,12 @@ public class UserCurriculum {
 | 
			
		||||
    public void setYear(int year) {
 | 
			
		||||
        this.year = year;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setActual(boolean actual) {
 | 
			
		||||
        this.actual = actual;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isActual() {
 | 
			
		||||
        return actual;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -66,9 +66,9 @@
 | 
			
		||||
          </div>
 | 
			
		||||
          <div  class="listElement">
 | 
			
		||||
            <div class=" containerElement" v-for="item in UserCurriculum.curriculumList">
 | 
			
		||||
              <div class="year" v-if="parseInt(item.dateyear) !== getYear()">Bac {{item.year}}</div>
 | 
			
		||||
              <div class="option" v-if="parseInt(item.dateyear) !== getYear()">{{item.option}}</div>
 | 
			
		||||
              <div class="dateyear" v-if="parseInt(item.dateyear) !== getYear()">Année {{item.dateyear}}-{{item.dateyear+1}}</div>
 | 
			
		||||
              <div class="year" v-if="item.actual === false">Bac {{item.year}}</div>
 | 
			
		||||
              <div class="option" v-if="item.actual === false">{{item.option}}</div>
 | 
			
		||||
              <div class="dateyear" v-if="item.actual === false">Année {{item.dateyear}}-{{item.dateyear+1}}</div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
@ -78,9 +78,9 @@
 | 
			
		||||
          </div>
 | 
			
		||||
          <div  class="listElement">
 | 
			
		||||
            <div class=" containerElement" v-for="item in UserCurriculum.curriculumList" >
 | 
			
		||||
                <div class="year" v-if="parseInt(item.dateyear) === getYear()">Bac {{item.year}}</div>
 | 
			
		||||
                <div class="option" v-if="parseInt(item.dateyear) === getYear()">{{item.option}}</div>
 | 
			
		||||
                <div class="dateyear" v-if="parseInt(item.dateyear) === getYear()">Année {{item.dateyear}}-{{item.dateyear+1}}</div>
 | 
			
		||||
                <div class="year" v-if="item.actual === true">Bac {{item.year}}</div>
 | 
			
		||||
                <div class="option" v-if="item.actual === true">{{item.option}}</div>
 | 
			
		||||
                <div class="dateyear" v-if="item.actual === true">Année {{item.dateyear}}-{{item.dateyear+1}}</div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@
 | 
			
		||||
  import CourseList from "@/Apps/Inscription/CourseList.vue";
 | 
			
		||||
  import {editMinerval, getCurrentMinerval} from "@/rest/minerval.js";
 | 
			
		||||
  import {postPayment} from "@/rest/payment.js";
 | 
			
		||||
  import {addUninscReq, createScholarshipRequest} from "@/rest/requests.js";
 | 
			
		||||
  import {addUninscReq, createScholarshipRequest, postChangeCurrReq} from "@/rest/requests.js";
 | 
			
		||||
 | 
			
		||||
  const user = ref(await getSelf());
 | 
			
		||||
  const UserCurriculum = ref(""); 
 | 
			
		||||
@ -62,6 +62,12 @@
 | 
			
		||||
    residencyDocUrl : ""
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  const changecurrdata = reactive({
 | 
			
		||||
    userId : user.value.regNo,
 | 
			
		||||
    actualcursus:null,
 | 
			
		||||
    newcursus:null
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  //Used to post a uninscription request
 | 
			
		||||
  const uninscriptionData = reactive({
 | 
			
		||||
    reason : null,
 | 
			
		||||
@ -132,7 +138,7 @@
 | 
			
		||||
  function getActualCurriculumList(){
 | 
			
		||||
    let actualCurriculumList = [];
 | 
			
		||||
    for (let i = 0; i < UserCurriculum.value.curriculumList.length; i++){
 | 
			
		||||
      if (UserCurriculum.value.curriculumList[i].dateyear === getYear()){
 | 
			
		||||
      if (UserCurriculum.value.curriculumList[i].actual === true){
 | 
			
		||||
        actualCurriculumList.push(UserCurriculum.value.curriculumList[i]);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
@ -281,20 +287,23 @@
 | 
			
		||||
            <input type="password" v-model="toModify.passwordConfirm">
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
            <button @click=" windowState = 0; ChangeInfos();">{{i18n("courses.confirm")}}</button>
 | 
			
		||||
            <button @click="windowState = 0; ChangeInfos();">{{i18n("courses.confirm")}}</button>
 | 
			
		||||
            <button @click="windowState = 0; resetInputs(toModify,pattern);" style="float:right;">{{i18n("courses.back")}}</button>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div v-else-if="windowState === 2" class="infosContainer">
 | 
			
		||||
          <div style="height:40px;">
 | 
			
		||||
            {{i18n("Curriculum")}}:  
 | 
			
		||||
            <select v-model="curriculum" >
 | 
			
		||||
              <option v-for="item in curricula" style="font-size:20px;" :value="item">{{item.option}}</option>        
 | 
			
		||||
            {{i18n("Curriculum")}}:
 | 
			
		||||
            <select v-model="changecurrdata.actualcursus" style="margin-right: 3%">
 | 
			
		||||
              <option v-for="item in getActualCurriculumList()" style="font-size:20px;" :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option>
 | 
			
		||||
            </select>
 | 
			
		||||
            New Curriculum :
 | 
			
		||||
            <select v-model="changecurrdata.newcursus">
 | 
			
		||||
              <option v-for="item in curricula"  :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option>
 | 
			
		||||
            </select>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <div>
 | 
			
		||||
            <button @click=" windowState = 0;">{{i18n("courses.confirm")}}</button>
 | 
			
		||||
            <button @click=" windowState = 0;postChangeCurrReq(changecurrdata)">{{i18n("courses.confirm")}}</button>
 | 
			
		||||
            <button @click="windowState = 0; resetInputs(personnalInfos,patternInfos);" style="float:right;">{{i18n("courses.back")}}</button>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
@ -329,9 +338,9 @@
 | 
			
		||||
            </div>
 | 
			
		||||
            <div  class="listElement">
 | 
			
		||||
              <div class=" containerElement" v-for="item in UserCurriculum.curriculumList">
 | 
			
		||||
                <div class="year" v-if="parseInt(item.dateyear) !== getYear()">Bac {{item.year}}</div>
 | 
			
		||||
                <div class="option" v-if="parseInt(item.dateyear) !== getYear()">{{item.option}}</div>
 | 
			
		||||
                <div class="dateyear" v-if="parseInt(item.dateyear) !== getYear()">Année {{item.dateyear}}-{{item.dateyear+1}}</div>
 | 
			
		||||
                <div class="year" v-if="item.actual === false">Bac {{item.year}}</div>
 | 
			
		||||
                <div class="option" v-if="item.actual === false">{{item.option}}</div>
 | 
			
		||||
                <div class="dateyear" v-if="item.actual === false">Année {{item.dateyear}}-{{item.dateyear+1}}</div>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
@ -341,9 +350,9 @@
 | 
			
		||||
            </div>
 | 
			
		||||
            <div  class="listElement">
 | 
			
		||||
              <div class=" containerElement" v-for="item in UserCurriculum.curriculumList" >
 | 
			
		||||
                <div class="year" v-if="parseInt(item.dateyear) === getYear()">Bac {{item.year}}</div>
 | 
			
		||||
                <div class="option" v-if="parseInt(item.dateyear) === getYear()">{{item.option}}</div>
 | 
			
		||||
                <div class="dateyear" v-if="parseInt(item.dateyear) === getYear()">Année {{item.dateyear}}-{{item.dateyear+1}}</div>
 | 
			
		||||
                <div class="year" v-if="item.actual === true">Bac {{item.year}}</div>
 | 
			
		||||
                <div class="option" v-if="item.actual === true">{{item.option}}</div>
 | 
			
		||||
                <div class="dateyear" v-if="item.actual === true">Année {{item.dateyear}}-{{item.dateyear+1}}</div>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
@ -46,4 +46,8 @@ export async function editUnregReq(id, newstate){
 | 
			
		||||
 | 
			
		||||
export async function getAllPayments(){
 | 
			
		||||
    return restGet("/payment")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export async function postChangeCurrReq(item){
 | 
			
		||||
    return restPost("/changecurriculumreq", item)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user