616
616
bool PACSController::ObtenerEstudio(void* connectionKey, const std::string& serverId, const std::string& uidEstudio, const std::string& AccNumber, IModeloDicom* pModelo, GNC::IProxyNotificadorProgreso* pNotificador)
618
//ESTO ES PARA QUE FUNCIONE EL PACS DE SIEMENS, VER SI SE PUEDE QUITAR...
619
ReleaseConnection(connectionKey);
620
GetConnection(connectionKey);
618
622
GTRACE("PACSController::ObtenerEstudio( " << serverId.c_str() << ", " << uidEstudio.c_str() << ", " << uidSerie.c_str());
620
624
if (pModelo == NULL) {
644
648
e = newDicomElement(DCM_StudyID);
647
e = newDicomElement(DCM_StudyInstanceUID);
648
if (uidEstudio != "") {
649
e->putString(uidEstudio.c_str());
653
e = newDicomElement(DCM_AccessionNumber);
654
if (AccNumber != ""){
655
e->putString(AccNumber.c_str());
651
if (!AccNumber.empty()){
652
e = newDicomElement(DCM_AccessionNumber);
653
e->putString(AccNumber.c_str());
659
657
std::string localAET = GNC::Entorno::Instance()->GetDicomLocalAET();
661
659
DicomServer* server = listaServidores->GetServer(serverId);
662
if (server->GetRetrieveWithMove()) {
660
if (server->GetRetrieveSeries()) {
661
//buscar + descargar series...
662
//we have to know the series uids and obtain series by series
663
e = newDicomElement(DCM_QueryRetrieveLevel);
664
e->putString("SERIES");
667
if (!uidEstudio.empty()) {
668
e = newDicomElement(DCM_StudyInstanceUID);
669
e->putString(uidEstudio.c_str());
673
e = newDicomElement(DCM_SeriesInstanceUID);
676
e = newDicomElement(DCM_Modality);
679
std::list<std::string> listOfUIDS;
680
std::list<std::string> listOfModalities;
682
NetClient<FindAssociation> f(connectionKey, "C-GET/FIND", pNotificador);
685
std::string localAET = GNC::Entorno::Instance()->GetDicomLocalAET();
687
DicomServer* server = listaServidores->GetServer(serverId);
688
if (server->useTLS) {
689
f.SetTLS(server->GetCertificate(), server->GetPrivateKey(), server->GetverifyCredentials());
691
if (server->GetPACSUser() != "") {
692
f.SetUserPass(server->GetPACSUser(), server->GetPACSPass());
695
f.QueryServer(&query, server, pModelo, localAET, CT_None);
700
DcmStack* stack = f.GetResultStack();
702
unsigned int numResults = 0;
704
numResults = stack->card();
707
for (unsigned int i = 0; i < numResults; i++) {
709
if (stack->elem(i)->ident() == EVR_dataset) {
710
DcmDataset* dset = dynamic_cast<DcmDataset*>(stack->elem(i));
712
OFString OFSSeriesInstanceUID;
713
OFString OFSeriesModality;
714
if ( dset->findAndGetOFString(DCM_SeriesInstanceUID, OFSSeriesInstanceUID).good() && dset->findAndGetOFString(DCM_Modality, OFSeriesModality).good() )
716
std::string seriesInstanceUID(OFSSeriesInstanceUID.c_str());
717
std::string seriesModality(OFSeriesModality.c_str());
719
listOfUIDS.push_back(seriesInstanceUID);
720
listOfModalities.push_back(seriesModality);
728
for (std::list<std::string>::iterator itUIDS = listOfUIDS.begin(), itModalities = listOfModalities.begin();
729
itUIDS != listOfUIDS.end(); itUIDS++, itModalities++)
731
//ESTO ES PARA QUE FUNCIONE EL PACS DE SIEMENS, VER SI SE PUEDE QUITAR...
732
ReleaseConnection(connectionKey);
733
GetConnection(connectionKey);
735
ObtenerSerie(connectionKey, serverId, (*itUIDS), pModelo, pNotificador, (*itModalities));
739
} else if (server->GetRetrieveWithMove()) {
663
740
e = newDicomElement(DCM_QueryRetrieveLevel);
664
741
e->putString("STUDY");
744
if (!uidEstudio.empty()) {
745
e = newDicomElement(DCM_StudyInstanceUID);
746
e->putString(uidEstudio.c_str());
667
750
int puerto = 11112;