def getBadResults(result, idList=None): packrespinf = result._p10_packrespinf errorList = packrespinf._r12_orerl._f10_orflker attachResultsMap = dict( (attachResult.attachId, attachResult) for attachResult in map( CR23AttachService.getAttachResult, errorList)) if -1 in attachResultsMap: commonErrors = attachResultsMap[-1].errors del attachResultsMap[-1] if idList: for attachId in idList: attachResultsMap.setdefault( attachId, AttachResult(attachId=attachId, errors=[])).errors.extend(commonErrors) if packrespinf._r10_packinf._p13_zerrpkg != 0 or packrespinf._r11_rsinf._r10_responcecode == AttachError.CriticalErrorPackageRejected: err = packrespinf._r11_rsinf packageError = AttachError(err._r10_responcecode, forceUnicode(err._responceMessage)) if idList: for attachId in idList: attachResultsMap.setdefault( attachId, AttachResult(attachId=attachId, errors=[])).errors.append(packageError) return attachResultsMap.values()
def getAttachResult(node): return AttachResult(attachId=node._f10_nzap, errors=[ AttachError(err._e10_ecd, forceUnicode(err._e11_ems)) for err in node._f11_flkerrorList._f10_flkerror ])
def getResponsePackageErrors(responceInfo): if hasattr(responceInfo, '_p10_packinf' ) and responceInfo._p10_packinf._p13_zerrpkg != 0: return [ AttachError( responceInfo._p10_packinf._p13_zerrpkg, forceUnicode(responceInfo._p10_packinf._p14_errmsg)) ] if hasattr(responceInfo, '_r10_packinf' ) and responceInfo._r10_packinf._p13_zerrpkg != 0: return [ AttachError( responceInfo._r10_packinf._p13_zerrpkg, forceUnicode(responceInfo._r10_packinf._p14_errmsg)) ] return []
def getAttachInfoList(node): return [ AttachInfo(orgCode=node._p11_mocd, sectionCode=item._a12_sect, begDate=forceDate(fromDateTimeTuple(item._a10_aad)), attachType=forceInt(item._a13_attp), attachReason=forceInt(item._a14_pr), doctorSNILS=forceUnicode(item._a11_snisl)) for item in node._p13_orcl ]
def getAttachInformation(self, clientInfo): u""" Проверка факта прикрепления пациента """ try: port = self.getPort() req = srv.GetAttachInformation() req._username = self.username req._password = self.password req._sendercode = self.senderCode self.insertPackageInformation( req, self.senderCode, srv.ns0.cAttachInformationPackage_Def) req._orderpack._p11_pr = self.getPersonDef(clientInfo, '_p11_pr') resp = port.GetAttachInformation(req) responcepack = resp._responcepack responceInfo = responcepack._p10_packrespinf responceErrors = self.getResponsePackageErrors(responceInfo) if responceErrors: raise CSynchronizeAttachException(u','.join( map(unicode, responceErrors))) attachList = responcepack._p11_atachlist._l10_orcl if not attachList: errorList = [ AttachError(e._e10_ecd, forceUnicode(e._e11_ems)) for e in responceInfo._r12_orerl._f10_orflker[0]. _f11_flkerrorList._f10_flkerror ] if AttachError.AttachesNotFound in [e.code for e in errorList]: return AttachResult(result=AttachedClientInfo()) else: return AttachResult(errors=errorList) node = attachList[0] # len > 1 ? client = self.getClientInfo(node._p12_pr) client.attaches = self.getAttachInfoList(node) return AttachResult(result=client) except SocketError as e: raise CSynchronizeAttachException( CR23AttachService.getNoConnectMessage(e)) except Exception: raise finally: if self.tracefile: self.tracefile.flush()
def getClientInfo(node): doc = DocumentInfo(forceUnicode(node._a21_ps), forceUnicode(node._a22_pn), forceInt(node._a23_dt)) policy = PolicyInfo(forceUnicode(node._a11_dcs), forceUnicode(node._a12_dcn), forceInt(node._a10_dct)) return AttachedClientInfo(nameCase(forceUnicode(node._a15_pfio)), nameCase(forceUnicode(node._a16_pnm)), nameCase(forceUnicode(node._a17_pln)), forceDate(fromDateTimeTuple(node._a19_pbd)), doc=doc, policy=policy)
def getDeAttachQueryInfo(node): return DeAttachQuery(id=forceRef(node._m01_nzap), srcOrgCode=forceUnicode(node._m02_mosrc), destOrgCode=forceUnicode(node._m03_modes), client=CR23AttachService.getClientInfo( node._m04_pep))
def getDeAttachedClientInfo(node): p = node._p11_pr doc = DocumentInfo(forceUnicode(p._a21_ps), forceUnicode(p._a22_pn), forceInt(p._a23_dt)) policy = PolicyInfo(forceUnicode(p._a11_dcs), forceUnicode(p._a12_dcn), forceInt(p._a10_dct), insurerCode=forceUnicode(p._a13_smcd), insuranceArea=forceUnicode(p._a14_trcd)) attach = AttachInfo(orgCode=forceUnicode(node._p15_mo), sectionCode=forceUnicode(node._p12_sect), endDate=forceDate(fromDateTimeTuple( node._p13_add)), deattachReason=forceInt(node._p14_adr), id=forceRef(node._p10_nzap)) return AttachedClientInfo(nameCase(forceUnicode(p._a15_pfio)), nameCase(forceUnicode(p._a16_pnm)), nameCase(forceUnicode(p._a17_pln)), forceDate(fromDateTimeTuple(p._a19_pbd)), forceInt(p._a18_ps), doc=doc, policy=policy, attach=attach)
def getAttachedClientInfo(node): doc = DocumentInfo(forceUnicode(node._a28), forceUnicode(node._a29), forceInt(node._a30)) policy = PolicyInfo(forceUnicode(node._a05), forceUnicode(node._a06), forceInt(node._a07), enp=forceUnicode(node._a08), insurerCode=forceUnicode(node._a32)) attaches = [ AttachInfo(begDate=fromDateTimeTuple(a._i1), doctorSNILS=forceUnicode(a._i2), sectionCode=forceUnicode(a._i3), orgCode=forceUnicode(a._i4), attachType=forceInt(a._i5)) for a in node._a09 ] regAddress = AddressInfo(forceUnicode(node._a12_r), forceUnicode(node._a13_c), forceUnicode(node._a14_n), forceUnicode(node._a15_u), forceUnicode(node._a16_d), forceUnicode(node._a17_k), forceUnicode(node._a18_k)) locAddress = AddressInfo(forceUnicode(node._a19_pr), forceUnicode(node._a20_pc), forceUnicode(node._a21_pn), forceUnicode(node._a22_pu), forceUnicode(node._a23_pd), forceUnicode(node._a24_pk), forceUnicode(node._a25_pk)) return [ AttachedClientInfo(nameCase(forceUnicode(node._a01)), nameCase(forceUnicode(node._a02)), nameCase(forceUnicode(node._a03)), birthDate=forceDate(fromDateTimeTuple( node._a04)), sex=forceUnicode(node._a10), SNILS=forceUnicode(node._a31), doc=doc, policy=policy, attach=attach, regAddress=regAddress, locAddress=locAddress) for attach in attaches ]
def cli(self): u""" :rtype: Client """ if self._cli is None: try: self._cli = Client(self._wsdl, timeout=self._timeout) self._cli.set_options(cache=DocumentCache()) except URLError as e: self._logger.exception(e) raise CServiceTFOMSException(u'Ошибка подключения к серверу ТФОМС: ({0})\n{1}'.format(self._wsdl, forceUnicode(e))) return self._cli