<?xml version="1.0" ?> 

<!-- CORRECTIONS OF SITUATION WHERE TAXON OCCURRENCES HAVE MULTIPLE PREFERRED DETERMINATIONS
     XML Report by Mike Weideli of Littlefield Consultancy 
     Version 3.0 - 22/11/2007
      
     The changes only effect records which have mutiple preferred determinations
     Changes are made on the following basis

     
     a. If one of the preferred determination has the same custodian as the current site id then this is chosen. If there is more than one determination which matches this criteria then the one with the latest determination date (based on vague_date_end) is chosen.
     b. If a.  fails to produce a result then an attempt is made to find the preferred determination of the owner of the record. If there is more than one determination which matches this criteria then the one with the latest determination date (based on vague_date_end) is chosen.
     c. If both a. and b. fail then this will mean that all the preferred determination come from a source other than the owner of the record or the current site id. They could all come from the same Site Id or from a mixture of id's. In these cases the date of determination is used to choose the preferred determination.   

  
      In all cases if the above still fails to find a unique preferred then the preferred will be the first Determination entered.
      This can theoretically occur, but is unlikely to occur in live systems. 
 			
     
-->


<batchupdate title="Pref1 - Corrects Duplicate Preferred Determinations"  menupath="Updates" description="Corrects situation where the import of data results in a Taxon Occurrence having multiple preferred determinations">

<SQL>


<Where keytype="Default">
CREATE TABLE #Duplicates (Taxon_Occurrence_key CHAR(16) COLLATE SQL_Latin1_General_CP1_CI_AS PRIMARY KEY,
  			 TAXOn_DETERMINATION_KEY CHAR(16) COLLATE SQL_Latin1_General_CP1_CI_AS)

CREATE TABLE #Duplicates2 (Taxon_Occurrence_key CHAR(16) COLLATE SQL_Latin1_General_CP1_CI_AS ,
  			 TAXOn_DETERMINATION_KEY_1 CHAR(16) COLLATE SQL_Latin1_General_CP1_CI_AS PRIMARY KEY)

INSERT INTO #DUPLICATES (TAXON_OCCURRENCE_KEY)
SELECT TAXON_DETERMINATION.TAXON_OCCURRENCE_KEY
FROM TAXON_DETERMINATION
WHERE TAXON_DETERMINATION.PREFERRED = 1
GROUP BY TAXON_DETERMINATION.TAXON_OCCURRENCE_KEY
HAVING Count(TAXON_DETERMINATION.TAXON_DETERMINATION_KEY)>1

INSERT INTO #DUPLICATES2 (TAXON_OCCURRENCE_KEY,Taxon_Determination_Key_1)
SELECT TD.TAXON_OCCURRENCE_KEY,TD.TAXON_Determination_KEY
FROM TAXON_DETERMINATION TD
INNER JOIN #DUPLICATES #D ON #D.TAXON_OCCURRENCE_KEY = TD.TAXON_OCCURRENCE_KEY
WHERE TD.PREFERRED = 1


UPDATE #D set #D.TAXON_DETERMINATION_KEY = TD.TAXON_DETERMINATION_KEY  
FROM TAXON_DETERMINATION TD INNER JOIN #DUPLICATES #D ON TD.TAXON_OCCURRENCE_KEY 
= #D.TAXON_OCCURRENCE_KEY WHERE TD.CUSTODIAN = 
(SELECT SETTING.DATA FROM SETTING WHERE SETTING.NAME = 'SiteId') AND TD.PREFERRED = 1
AND TD.VAGUE_DATE_END  =  (SELECT Max(VAGUE_DATE_END) FROM TAXON_DETERMINATION AS TD2 
WHERE TD2.TAXON_OCCURRENCE_KEY = TD.TAXON_OCCURRENCE_KEY AND TD.PREFERRED = 1 AND TD2.CUSTODIAN =
(SELECT SETTING.DATA FROM SETTING WHERE SETTING.NAME = 'SiteId')  )

UPDATE #D set #D.TAXON_DETERMINATION_KEY = TD.TAXON_DETERMINATION_KEY  
FROM TAXON_DETERMINATION TD INNER JOIN #DUPLICATES #D ON TD.TAXON_OCCURRENCE_KEY = #D.TAXON_OCCURRENCE_KEY 
INNER JOIN TAXON_OCCURRENCE TOCC ON #D.TAXON_OCCURRENCE_KEY = TOCC.TAXON_OCCURRENCE_KEY
WHERE TD.PREFERRED=1 AND TD.CUSTODIAN = TOCC.CUSTODIAN AND #D.TAXON_DETERMINATION_KEY  is null  
AND TD.VAGUE_DATE_END  =  (SELECT Max(VAGUE_DATE_END) FROM TAXON_DETERMINATION AS TD2 
WHERE TD2.TAXON_OCCURRENCE_KEY = TD.TAXON_OCCURRENCE_KEY AND TD2.PREFERRED = 1 AND TD2.CUSTODIAN = TOCC.CUSTODIAN)


UPDATE #D set #D.TAXON_DETERMINATION_KEY = TD.TAXON_DETERMINATION_KEY  
FROM TAXON_DETERMINATION TD INNER JOIN #DUPLICATES #D ON TD.TAXON_OCCURRENCE_KEY = #D.TAXON_OCCURRENCE_KEY 
WHERE TD.PREFERRED=1 AND #D.TAXON_DETERMINATION_KEY  is null  
AND TD.VAGUE_DATE_END  =  (SELECT Max(VAGUE_DATE_END) FROM TAXON_DETERMINATION AS TD2 
WHERE TD2.TAXON_OCCURRENCE_KEY = TD.TAXON_OCCURRENCE_KEY AND TD2.PREFERRED = 1 )


UPDATE TD SET TD.PREFERRED  =  0 
FROM TAXON_DETERMINATION TD INNER JOIN #DUPLICATES #D  ON TD.TAXON_OCCURRENCE_KEY = #D.TAXON_OCCURRENCE_KEY

UPDATE TD SET TD.PREFERRED  =  1 
FROM TAXON_DETERMINATION TD INNER JOIN #DUPLICATES #D  ON TD.TAXON_DETERMINATION_KEY = #D.TAXON_DETERMINATION_KEY
WHERE #D.TAXON_DETERMINATION_KEY IS NOT NULL

SELECT 'Taxon_Occurrence' AS [TABLE], #D2.Taxon_Occurrence_Key AS [KEY]
FROM #DUPLICATES2 #D2 INNER JOIN TAXON_DETERMINATION TD ON TD.TAXON_DETERMINATION_KEY = #D2.TAXON_DETERMINATION_KEY_1
INNER JOIN INDEX_TAXON_NAME ITN ON ITN.TAXON_LIST_ITEM_KEY = TD.TAXON_LIST_ITEM_KEY
INNER JOIN TAXON_DETERMINATION TD1 ON TD1.TAXON_OCCURRENCE_KEY = #D2.TAXON_OCCURRENCE_KEY
INNER JOIN INDEX_TAXON_NAME ITN1 ON ITN1.TAXON_LIST_ITEM_KEY = TD1.TAXON_LIST_ITEM_KEY
INNER JOIN DETERMINER_ROLE DR ON DR.DETERMINER_ROLE_KEY = TD.DETERMINER_ROLE_KEY
INNER JOIN DETERMINER_ROLE DR1 ON DR1.DETERMINER_ROLE_KEY = TD1.DETERMINER_ROLE_KEY
INNER JOIN DETERMINATION_TYPE DT ON DT.DETERMINATION_TYPE_KEY = TD.DETERMINATION_TYPE_KEY
INNER JOIN DETERMINATION_TYPE DT1 ON DT1.DETERMINATION_TYPE_KEY = TD1.DETERMINATION_TYPE_KEY
WHERE TD1.PREFERRED = 1
ORDER BY #D2.TAXON_OCCURRENCE_KEY, TD.PREFERRED DESC 



DROP TABLE #Duplicates

DROP TABLE #Duplicates2
 </Where>


</SQL>

</batchupdate>

