Package beans.directory.service

Source Code of beans.directory.service.DirectoryServiceBean

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

package beans.directory.service;

import beans.directory.service.entity.ServiceDetails;
import framework.beans.directory.DirectoryBean;
import beans.contract.entity.ServicePrice;
import beans.directory.checkuptype.entity.CheckupType;
import beans.directory.danger.entity.DangerService;
import beans.directory.packet.entity.PacketTemplateItem;
import beans.directory.service.entity.Service;
import beans.directory.service.entity.ServiceAction;
import beans.directory.service.entity.ServiceActionPK;
import beans.directory.service.entity.ServiceGroup;
import beans.directory.service.entity.ServiceToService;
import beans.directory.service.entity.ServiceToServiceDetails;
import beans.directory.service.entity.ServiceToServicePK;
import beans.directory.simple.entities.ServiceClass;
import beans.doctor.direction.Direction;
import beans.service.ServiceRender;
import framework.generic.ClipsServerException;
import framework.generic.EDataIntegrity;
import framework.generic.EMoveToTrash;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.ejb.Stateful;
import beans.UserRightsSet;import beans.expenditure.entity.ExpenditureDefault;
import beans.directory.simple.entities.ReqType;
import beans.directory.simple.entities.VisitType;
import framework.security.RightChecker;
import framework.security.UserRight;

/**
* @security - Ok.
* @author axe
*/
@Stateful(mappedName="clips-beans/DirectoryServiceBean")
public class DirectoryServiceBean extends DirectoryBean<Service, ServiceDetails>
        implements DirectoryServiceBeanRemote {

    public DirectoryServiceBean() {
        super(Service.class, "услуга");
    }

    @Override
    protected UserRight getRightForCreateDirectoryItem() {
        return UserRightsSet.WRITE_REGION_ADMIN_DIRECTORY;
    }

    @Override
    protected UserRight getRightForWriteToDirectory() {
        return UserRightsSet.WRITE_REGION_ADMIN_DIRECTORY;
    }
   
    @Override
    protected void set(Service service, ServiceDetails item) throws ClipsServerException {
        service.setTitle(item.title);
        service.setDescription(item.description);
        service.setDefaultDuration(item.defaultDuration);
        service.setDirty(item.dirty);
        service.setTrash(item.hidden);
        service.setCode(item.code);
        service.setCheckupType(item.checkupType == 0 ? null : findEntity(CheckupType.class, item.checkupType));
        service.setReqType(item.reqTypeID == 0 ? null : findEntity(ReqType.class, item.reqTypeID));
        service.setVisitType(item.visitTypeID == 0 ? null : findEntity(VisitType.class, item.visitTypeID));
        service.setServiceClass(findEntity(ServiceClass.class, item.serviceClass));
        service.setServiceGroup(findEntity(ServiceGroup.class, item.serviceGroup));
    }

    @Override
    protected void onRemove(Service entity) throws ClipsServerException {
        Field f[] = { new Field("service", entity) };
       
        if(getEntityCount(ServicePrice.class, f) > 0) {
            throw new EDataIntegrity("Услуга упомянута в договорах, удаление невозможно");
        }
        if(getEntityCount(DangerService.class, f) >0){
            throw new EDataIntegrity("Данная услуга обязательна к оказанию по вредному фактору, удаление невозможно");
        }       

        if(getEntityCount(PacketTemplateItem.class, f) > 0) {
            throw new EMoveToTrash("Услуга входит в пакеты услуг, удаление невозможно");
        }
        if(getEntityCount(ServiceRender.class, f) > 0) {
            throw new EMoveToTrash("Данная услуга оказана, удаление невозможно");
        }
        if(getEntityCount(Direction.class, f) > 0) {
            throw new EMoveToTrash("Существуют направления на данную услугу, удаление невозможно");
        }
       
        Field f1[] = {
            new Field("key.pservice", entity.getId()),
        };
        deleteEntityList(ServiceToService.class, f1);
       
        Field f2[] = {
            new Field("key.service", entity.getId()),
        };
        deleteEntityList(ServiceAction.class, f2);
       
        deleteEntityList(ExpenditureDefault.class, f);
    }

    @Override
    public int getCheckupType(int serviceID) throws ClipsServerException {
        Service service = findEntity(Service.class, serviceID);
        return service.getCheckupType().getId();
    }

    @Override
    public void setCheckupType(int serviceID, int checkupTypeID) throws ClipsServerException {
        Service service = findEntity(Service.class, serviceID);
        service.setCheckupType(findEntity(CheckupType.class, checkupTypeID));
        manager.persist(service);
        manager.flush();
        manager.refresh(service);
    }

    @Override
    public ArrayList<ServiceToServiceDetails> getChildServiceList(int pserviceId) throws ClipsServerException {
        if(pserviceId == 0) {
            throw new EDataIntegrity("Попытка получить связанные услуги у услуги с ID=0");
        }
       
        Iterator list = findEntityList(ServiceToService.class, "pservice.id", pserviceId).iterator();
        ArrayList<ServiceToServiceDetails> res = new ArrayList<ServiceToServiceDetails>();
        while(list.hasNext()) {
            ServiceToService sts = (ServiceToService)list.next();
            res.add(sts.getDetails((RightChecker) this));
        }
       
        return res;
    }

    @Override
    public void removeChildService(ServiceToServiceDetails details, int pserviceId) throws ClipsServerException {
        checkCommandAccessibility(COMMAND_WRITE);
       
        if(pserviceId == 0) {
            throw new EDataIntegrity("Попытка удалить связанную услугу у услуги с ID=0");
        }
       
        Field f[] = {
            new Field("key.pservice", pserviceId),
            new Field("key.cservice", details.cserviceId)
        };
        ServiceToService sts = (ServiceToService) findEntityList(ServiceToService.class, f).get(0);
        manager.remove(sts);
    }

    @Override
    public int addChildService(ServiceToServiceDetails details, int pserviceId) throws ClipsServerException {
        checkCommandAccessibility(COMMAND_WRITE);
       
        if(pserviceId == 0) {
            throw new EDataIntegrity("Попытка назначить связанную услугу услуге с ID=0");
        }
       
        ServiceToService serviceToService = null;
        if(details.pserviceId != 0) {
            Field f[] = {
                new Field("key.pservice", pserviceId),
                new Field("key.cservice", details.cserviceId)
            };
            List list = findEntityList(ServiceToService.class, f);
            if (!list.isEmpty()){
                serviceToService = (ServiceToService) list.get(0);//Должна быть одна
                serviceToService.setDescription(details.description);
                serviceToService.setObligatory(details.obligatory);
            }
            else {
                serviceToService = new ServiceToService();
                serviceToService.setKey(new ServiceToServicePK(pserviceId, details.cserviceId));
                serviceToService.setDescription(details.description);
                serviceToService.setObligatory(details.obligatory);
                serviceToService.setParentService(findEntity(Service.class, details.pserviceId));
                serviceToService.setChildService(findEntity(Service.class, details.cserviceId));
            }
        }          
        return saveEntity(serviceToService);
    }

    @Override
    public Set<Integer> getActions(int service) throws ClipsServerException {
        if(service == 0) {
            throw new EDataIntegrity("Попытка выбрать действия врача для типа услуги с ID=0");
        }
       
        Iterator<ServiceAction> list = findEntityList(ServiceAction.class, "key.service", service).iterator();
        Set<Integer> res = new HashSet<Integer>();
        while(list.hasNext()) {
            ServiceAction action = (ServiceAction)list.next();
            res.add(action.getKey().getAction());
        }
       
        return res;
    }

    @Override
    public void setActions(int service, Set<Integer> actions) throws ClipsServerException {
        checkCommandAccessibility(COMMAND_WRITE);
        Set<Integer> backup = new HashSet<Integer>(actions);
        Set<Integer> oldActions = getActions(service);
       
        actions.removeAll(oldActions);
       
        oldActions.removeAll(backup);
       
        if(oldActions.size() > 0) {
            @SuppressWarnings("unchecked")

            Field f[] = {
                new Field("key.service", service),
                new Field("key.action", oldActions, Field.OPERATOR_IN)
            };
            deleteEntityList(ServiceAction.class, f);
        }

        Iterator<Integer> addNew = actions.iterator();
        while(addNew.hasNext()) {
            ServiceAction r = new ServiceAction();
            r.setKey(new ServiceActionPK(service, addNew.next()));
            System.out.println("Added new:" + r);
            manager.persist(r);
        }
    }
   
}
TOP

Related Classes of beans.directory.service.DirectoryServiceBean

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.