cardDiscounts.put(checkupChunk.serviceID, CalcDiscount.calculateDiscount(manager, chunk.discountCardID, checkupChunk.serviceID, chunk.packetServiceTemplateID));
}
}
}
PacketService packetService = null;
Medexam medexam = null;
//если присутствует пакет
if (chunk.packetServiceTemplateID != 0) {
packetService = new PacketService();
PacketTemplate packetTemplate = findEntity(PacketTemplate.class, chunk.packetServiceTemplateID);
packetService.setPacketTemplate(packetTemplate);
saveEntity(packetService);
MedexamType medexamType = packetTemplate.getMedexamType();
if (medexamType != null) {
//не просто пакет, а медосмотр
if (chunk.diseaseID != 0) {
throw new EDataIntegrity("Для медосмотра необходимо создать новое заболевание");
}
//создаем заболевание и медосмотр
disease = new Disease();
List<Emc> emcList = findEntityList(Emc.class, "client", polis.getClient());
if (emcList.size() != 1) {
throw new EDataIntegrity("У пациента " + emcList.size() + " ЕМК");
}
disease.setEmc(emcList.get(0));
Date current = new Date();
disease.setCreated(current);
disease.setDateReg(current);
disease.setCollaborator(collaborator);
manager.persist(disease);
manager.flush();
manager.refresh(disease);
chunk.diseaseID = disease.getId();
medexam = new Medexam();
medexam.setDisease(disease);
medexam.setMedexamType(medexamType);
manager.persist(medexam);
}
}
uniqMap = new HashMap<Integer, Set<Integer>>();
for (int i = 0; i < chunk.serviceList.size(); i++) {
ServiceCheckupChunk serviceCheckupChunk = chunk.serviceList.get(i);
//Всё, собираем детали
ServiceRenderDetails serrenDetails = new ServiceRenderDetails();
Integer effectiveDiscount = chunk.forceDiscountMap.get(serviceCheckupChunk.serviceID);
if (effectiveDiscount == null) {
effectiveDiscount = cardDiscounts.get(serviceCheckupChunk.serviceID);
}
if (effectiveDiscount == null) {
effectiveDiscount = new Integer(0);
}
/**
* Костыль
* По опасному фактору сюда приходят несколько чанков, в которых проставлен
* ID одной и той же услуги (конкретно - посещение Профилактическое первичное амбулаторное),
* для которой в таблице DangerService существует несколько записей с разными специальностями врачей
* Проще говоря это услуги одного типа, а обслужить должны несколько специалистов
* т.к в чанке нет информации о специальности приходится хитрым образом обеспечивать для
* каждой услуги уникальную специальность
*/
//Если по опасному фактору - то присутствует специальность врача
int specID = 0;
if (serviceCheckupChunk.dangerID != 0) {
Field f[] = {
new Field("danger.id", serviceCheckupChunk.dangerID),
new Field("service.id", serviceCheckupChunk.serviceID),
};
List<DangerService> list = findEntityList(DangerService.class, f);
if (list.size() == 0) {
throw new EDataIntegrity("В приказе 90 для вредного фактора не найдена услуга");
} else if (list.size() == 1) {
Speciality spec = list.get(0).getSpeciality();
specID = spec == null ? 0 : spec.getId();
} else {
specID = findUniqSpec(serviceCheckupChunk.serviceID, list);
}
}
// ServiceRender serren = createNewSerren(serrenDetails);
serrenDetails.serviceID = serviceCheckupChunk.serviceID;
serrenDetails.cardID = chunk.discountCardID;
serrenDetails.discount = effectiveDiscount;
serrenDetails.diseaseID = chunk.diseaseID;
serrenDetails.directorID = getCollaboratorId();
serrenDetails.polisID = polis.getId();
serrenDetails.date = new Date();
serrenDetails.specialityID = specID;
//Что с этим делать?
serrenDetails.packetServiceID = packetService != null ? packetService.getId() : 0;
SerrenMod sm = createNewSerren(serrenDetails);
auditDetList.addAll(sm.info.getAudit());
//Если это медосмотр то создаем результаты медосмотра
if (medexam != null) {
AuditDoc<MedSerrenResult> auditmsr = new AuditDoc<MedSerrenResult>(null, getCollaborator());