Package web.operator

Source Code of web.operator.CollaboratorController

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package web.operator;

import domain.Client;
import domain.Collaborator;
import domain.District;
import domain.Lpu;
import domain.editors.Editor;
import domain.shedule.WorkType;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import utils.Day;
import utils.WeekIndex;
import web.generic.CH;
import web.generic.GenericCommandController;
import web.rechelper.IncomingParamsValidator;
import web.rechelper.ReceptionDTO;
import web.rechelper.ReceptionHelper;
import web.rechelper.Ticket;
import web.rechelper.WeekDay;

/**
* Контроллер выбора врача оператором при записи на прием
* Обязательные параметры:
*     lpu - ID лечебно-профилактического учреждения
* Необязательные параметры:
*     collaborator - ID сотрудника
*     type - ID приема
* @author lacoste
*/
public class CollaboratorController extends GenericCommandController {

    public CollaboratorController() {
        setCommandClass(CollaboratorDTO.class);
    }

    @Override
    protected void onBind(HttpServletRequest request, Object command, BindException errors) throws Exception {
        CollaboratorDTO dto = (CollaboratorDTO) super.getCommand(request);
        if(dto.getCollaborator() != null) {
            Collaborator collab = dto.getCollaborator();
            dto.setSurname(collab.getClient().getSurname().getTitle());
            dto.setName(collab.getClient().getName().getTitle());
            dto.setPatron(collab.getClient().getPatronymic().getTitle());
        }
    }

    @Override
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
        binder.registerCustomEditor(WorkType.class, new Editor(getDao(), WorkType.class));
        binder.registerCustomEditor(Lpu.class, new Editor(getDao(), Lpu.class));
        binder.registerCustomEditor(Client.class, new Editor(getDao(), Client.class));
        binder.registerCustomEditor(Collaborator.class, new Editor(getDao(), Collaborator.class));
        binder.registerCustomEditor(District.class, new Editor(getDao(), District.class));
    }


    @Override
    protected ModelAndView handle(HttpServletRequest request,
            HttpServletResponse response, Object command, BindException errors) throws Exception {

        Lpu lpu = CH.getOptional(getDao(), Lpu.class, request.getParameter("lpu"));
        if (lpu == null) {
            return IncomingParamsValidator.redirectTo("/operator/index.htm", null, null, lpu, null);
        }

        CollaboratorDTO dto = (CollaboratorDTO) command;
        HashMap model = new HashMap();
        DetachedCriteria queryCriteria = null;

        if (dto.getType() != null) {
            queryCriteria = DetachedCriteria.forClass(Collaborator.class)
                .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
            queryCriteria.add(Property.forName("lpu").eq(dto.getLpu()))
                .createCriteria("sheduleIndividualCollection")
                .add(Property.forName("workType").eq(dto.getType()));
        } else {
            Calendar cal = Calendar.getInstance();

            Date begin = cal.getTime();

            cal.add(Calendar.DAY_OF_YEAR, 14);
            Date end = cal.getTime();

            cal.set(2007, 0, 1, 0, 0, 0);
            Date date2007Begin = cal.getTime();

            cal.add(Calendar.MONTH, 1);
            Date date2007End = cal.getTime();

            queryCriteria = DetachedCriteria.forClass(Collaborator.class)
                .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

            queryCriteria.add(Property.forName("lpu").eq(dto.getLpu()))
                .createCriteria("sheduleIndividualCollection")
                .add( Restrictions.disjunction()
                    .add (Restrictions.conjunction()
                        .add( Restrictions.ge("timeBegin", date2007Begin ) )
                        .add( Restrictions.le("timeBegin", date2007End ) )
                    )
                    .add (Restrictions.conjunction()
                        .add( Restrictions.ge("timeBegin", begin ) )
                        .add( Restrictions.le("timeBegin", end ) )
                    )
                )
                .createCriteria("workType")
                .add(Property.forName("available").eq(Boolean.TRUE));

        }

        if((dto.getSurname() != null && !dto.getSurname().isEmpty())
                || (dto.getName() != null && !dto.getName().isEmpty())
                || (dto.getPatron() != null && !dto.getPatron().isEmpty())) {
            DetachedCriteria colls = queryCriteria
                    .createCriteria("client");
            if(dto.getSurname() != null && !dto.getSurname().isEmpty()) {
                colls.createCriteria("surname")
                        .add(Property.forName("title").like(dto.getSurname() + "%").ignoreCase());
            }
            if(dto.getName() != null && !dto.getName().isEmpty()) {
                colls.createCriteria("name")
                        .add(Property.forName("title").like(dto.getName()+ "%").ignoreCase());
            }
            if(dto.getPatron() != null && !dto.getPatron().isEmpty()) {
                colls.createCriteria("patronymic")
                        .add(Property.forName("title").like(dto.getPatron()+ "%").ignoreCase());
            }
        }


        List<Collaborator> collabs = getDao().getList(queryCriteria, null, null);

        List<CollabWorkTypeDTO> collabWorks = new LinkedList<CollabWorkTypeDTO>();
        List<WorkType> works;
        for (Collaborator collab : collabs) {
            works = getDao().getWorksByCollaborator(collab);
            for (WorkType work : works) {
                CollabWorkTypeDTO collabWork = new CollabWorkTypeDTO();
                collabWork.setWorkType(work);
                collabWork.setCollaborator(collab);
                collabWorks.add(collabWork);
            }
        }
        List<WorkType> workTypes = getDao().getList(WorkType.class);

        Map<CollabWorkTypeDTO, Ticket> collabTicketMap = new HashMap<CollabWorkTypeDTO, Ticket>();

        for (CollabWorkTypeDTO collabWorkTypeDTO : collabWorks) {
            ReceptionDTO rdto = new ReceptionDTO();
            rdto.setCollaborator(collabWorkTypeDTO.getCollaborator());
            rdto.setLpu(lpu);
            rdto.setType(collabWorkTypeDTO.getWorkType());
            Day day = new Day(new Date());
            Date dateStart = day.getDate();
            Calendar calendar = day.getCalendar();
            calendar.add(Calendar.DAY_OF_MONTH, 13);
            day = new Day(calendar);
            Date dateEnd = day.getEndDate();

            ReceptionHelper rh = new ReceptionHelper(getDao(), rdto, dateStart, dateEnd);
            List<WeekDay> wModel = rh.getModel();
            for (int i = 0; i < wModel.size() && collabTicketMap.get(collabWorkTypeDTO) == null; i++) {
                WeekDay weekDay = wModel.get(i);
                List<Ticket> tickets = weekDay.getTickets();
                if (tickets != null){
                    for (Ticket ticket : tickets) {
                        if (!ticket.isBuzy()){
                            collabTicketMap.put(collabWorkTypeDTO, ticket);
                            break;
                        }
                    }
                }
            }
        }


        model.put("tickets", collabTicketMap);
        model.put("command", dto);
        model.put("client", dto.getClient());
        model.put("collabworks", collabWorks);
        model.put("workTypes", workTypes);
        model.put("pageBreadcrumb", ReceptionController.initBreadCrumb(dto.getClient(),
                                                                        dto.getType(),
                                                                        dto.getLpu(),
                                                                        dto.getCollaborator(),
                                                                        dto.getTime()));

        return new ModelAndView("operator/collaborator", model);
    }
}
TOP

Related Classes of web.operator.CollaboratorController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.