/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.delegate.doctor.direction;
import beans.directory.direction.DirectoryDirectionTypeBean;
import beans.doctor.direction.DirectionBean;
import beans.doctor.direction.DirectionBeanRemote;
import clips.delegate.client.ClientLocal;
import beans.doctor.direction.DirectionDetails;
import cli_fmw.delegate.AuditListener;
import clips.delegate.directory.complex.DirectoryDirectionType;
import clips.delegate.directory.complex.DirectoryDirectionTypeItem;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.directory.complex.DirectoryMKB10;
import clips.delegate.directory.complex.DirectoryMKB10Item;
import clips.delegate.directory.filtered.DirectoryService;
import clips.delegate.directory.filtered.DirectoryServiceItem;
import clips.delegate.doctor.HasSerrenLocal;
import clips.delegate.doctor.Iconable;
import clips.delegate.DEC.DECServiceRender;
import cli_fmw.delegate.DelegateLine2;
import clips.delegate.service.SerRenLocal;
import cli_fmw.main.ClipsException;
import cli_fmw.delegate.utils.TimeLocal;
import cli_fmw.main.DelegatePrintable;
import cli_fmw.main.DirectoryItemReplacedException;
import cli_fmw.report.CombinedReportCreator;
import cli_fmw.report.FormReportCreator;
import clips.doctor.newEMC.init.generic.DelegateNodeLeaf;
import clips.delegate.directory.complex.DirectoryEnterprise;
import clips.delegate.directory.complex.DirectoryEnterpriseItem;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.delegate.directory.simple.committeeReason.DirectoryCommitteeReason;
import clips.delegate.directory.simple.committeeReason.DirectoryCommitteeReasonItem;
import clips.delegate.doctor.Signable;
import framework.utils.Converter;
import java.util.Date;
import java.util.HashMap;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import framework.utils.DateTimeUtils;
/**
* Делегат, предоставляющий доступ к одной строке таблицы direction -
* таблица направлений, а тахже подгружающий из базы данные из таблицы
* direction_type (тип направления), которые содержат тип направления,
* экранную форму и печатную форму.
* @author ViP
*/
public class DirectionLocal extends DelegateNodeLeaf<DirectionBeanRemote, DirectionDetails>
implements Iconable, DelegatePrintable, HasSerrenLocal, Signable {
private DECServiceRender serviceRender = new DECServiceRender(this, "информацию о б услуге, в рамках которой выписано направление", getAuditListener());
private static ImageIcon icon = null;
public DirectionLocal(int id, AuditListener al) throws ClipsException {
super(id, al);
}
public DirectionLocal(int id, SerRenLocal serRen, AuditListener al) throws ClipsException {
super(id, al);
serviceRender.initBy(serRen);
}
public DirectionLocal(SerRenLocal serRen) throws ClipsException {
super(serRen.getAuditListener());
getDetails().date = TimeLocal.getCurrentTime().getTime();
serviceRender.initBy(serRen);
}
/**
* Инициализирует направление по деталям
* @param details детали
* @param serRen делегат серрен
* @throws ClipsException
*/
public DirectionLocal(DirectionDetails details, SerRenLocal serRen, AuditListener al) throws ClipsException {
super(details, al);
serviceRender.initBy(serRen);
}
@Override
protected DirectionDetails getNewDetails() {
return new DirectionDetails();
}
@Override
public SerRenLocal getSerrenLocal() throws ClipsException {
return serviceRender.get();
}
public Date getDate() throws ClipsException {
return getDetails().date;
}
//never use client date
@Deprecated
public void setDate(Date date) throws ClipsException {
getDetails().date = date;
fireContentStateEvent();
}
public DirectoryMKB10Item getMkb() throws ClipsException {
DirectoryMKB10 dmkb = (DirectoryMKB10) DirectoryLocator.getDirectory(DirectoryMKB10.class, false);
return dmkb.getItemFromID(getDetails().mkbID);
}
public void setMkb(DirectoryMKB10Item item) throws ClipsException {
getDetails().mkbID = item.getID();
fireContentStateEvent();
}
public String getDescription() throws ClipsException {
return getDetails().description;
}
public void setDescription(String description) throws ClipsException {
getDetails().description = description;
fireContentStateEvent();
}
public boolean isOrdered() throws ClipsException {
return getDetails().ordered;
}
public void setOrdered(boolean ordered) throws ClipsException {
getDetails().ordered = ordered;
fireContentStateEvent();
}
public DirectoryCommitteeReasonItem getCommitteeReason() throws ClipsException {
DirectoryCommitteeReason reasons = DirectoryLocator.getDirectory(DirectoryCommitteeReason.class);
try {
return reasons.getItemFromID(getDetails().reasonID);
} catch (DirectoryItemReplacedException ex) {
reload();
return reasons.getItemFromID(getDetails().reasonID);
}
}
public void setCommitteeReason(DirectoryCommitteeReasonItem reason) throws ClipsException {
if (reason != null) {
getDetails().reasonID = reason.getID();
setService(null);
}
else {
getDetails().reasonID = 0;
}
fireContentStateEvent();
}
public DirectoryDirectionTypeItem getType() throws ClipsException {
DirectoryDirectionType directionTypes = DirectoryLocator.getDirectory(DirectoryDirectionType.class, false);
return directionTypes.getItemFromID(getDetails().typeID);
}
public void setType(DirectoryDirectionTypeItem type) throws ClipsException {
if(getDetails().typeID != type.getID()) {
getDetails().typeID = type.getID();
fireContentStateEvent();
}
}
@Override
public String toString() {
return "Направление";
}
/**
* Возвращает услугу
* @return
* @throws cli_fmw.delegate.exception.ClipsException
*/
public DirectoryServiceItem getService() throws ClipsException {
DirectoryService services = (DirectoryService) DirectoryLocator.getDirectory(DirectoryService.class, false);
return services.getItemFromID(getDetails().serviceID);
}
/**
* Назаначает услугу
* @param service
*/
public void setService(DirectoryServiceItem service) throws ClipsException {
if (service != null) {
getDetails().serviceID = service.getID();
setCommitteeReason(null);
}
else {
getDetails().serviceID = 0;
}
fireContentStateEvent();
}
@Override
public void print(CombinedReportCreator ccreator) throws ClipsException {
FormReportCreator creator = ccreator.createFormReporter(getClass(), 1);
HashMap<String, Object> extraFields = new HashMap<String, Object>();
String dirChoiceItem = "";
switch (((DirectoryDirectionTypeItem) getType()).getChoice()) {
case (DirectoryDirectionTypeBean.OBLIGATE_SERVICE) :
dirChoiceItem = getService().getTitle();
break;
case (DirectoryDirectionTypeBean.OBLIGATE_COMMITTEE) :
dirChoiceItem = "КЭК. Причина: " + getCommitteeReason().getTitle();
break;
}
extraFields.put("directionTitle", "Направление: " + getType().getTitle());
extraFields.put("directionDate", Converter.dateToString(getDate()));
ClientLocal cl = getSerrenLocal().getDiseaseLocal().getEmcLocal().getClient();
String clientInfo = cl.toString();
if (cl.getBorn() != null) {
clientInfo += ", " + Converter.dateToString(cl.getBorn());
clientInfo += " (" + DateTimeUtils.calcAge(cl.getBorn(), TimeLocal.getCurrentTime().getTime()) + ")";
}
extraFields.put("clientData", clientInfo);
extraFields.put("clientAddress", cl.getAddress().toString());
extraFields.put("directionChoice", dirChoiceItem);
if (getMkb() != null) {
extraFields.put("directionMkb", getMkb().toString());
}
DirectoryCollaboratorItem collab = getSerrenLocal().getSerRenDirector();
String collabStr = collab.toString();
extraFields.put("directionCollaborator", collabStr);
if (getDescription() != null) {
extraFields.put("directionDesc", getDescription());
}
creator.createReport(null, null, extraFields.entrySet(), null);
creator.finish();
}
@Override
public Icon getIcon() {
return icon;
}
@Override
protected String getBeanName() {
return DirectionBean.class.getSimpleName();
}
@Override
public boolean isSignCorrect() throws ClipsException{
//STUB
return (getID() != -1 );
//END STUB
}
@Override
public String getSignMessage() throws ClipsException {
if (getID() == 0) {
return "Подпись отсутствует";
}
//STUB
String coll;
if (getSerrenLocal().getCollaboratorFunctions() != null) {
coll = getSerrenLocal().getCollaboratorFunctions().getTitle();
} else {
coll = getSerrenLocal().getSerRenDirector().getTitle();
}
String s = "Подписано " + Converter.dateToString(getDate())
+ " - " + coll;
if (isSignCorrect() ) {
return s;
} else {
return "Подпись не соответствует данным!";
}
//END STUB
}
}