from gratipay.wireup import db, env
from gratipay.models.team import AlreadyMigrated

db = db(env())

teams = db.all("""
    SELECT distinct ON (t.slug) t.*::teams
      FROM teams t
      JOIN tips ON t.owner = tips.tippee    -- Only fetch teams whose owners had tips under Gratipay 1.0
     WHERE t.is_approved IS TRUE            -- Only fetch approved teams
       AND NOT EXISTS (                     -- Make sure tips haven't been migrated for any teams with same owner
            SELECT 1
              FROM payment_instructions pi
              JOIN teams t2 ON t2.slug = pi.team
             WHERE t2.owner = t.owner
               AND pi.ctime < t2.ctime
       )
""")

for team in teams:
    try:
        ntips = team.migrate_tips()
        print("Migrated {} tip(s) for '{}'".format(ntips, team.slug))
    except AlreadyMigrated:
        print("'%s' already migrated." % team.slug)

print("Done.")

from gratipay.wireup import db, env
from gratipay.models.team import AlreadyMigrated

db = db(env())

teams = db.all("""
    SELECT distinct ON (t.slug) t.*::teams
      FROM teams t
      JOIN tips ON t.owner = tips.tippee    -- Only fetch teams whose owner have tips.
     WHERE t.is_approved IS TRUE            -- Only fetch approved teams.
       AND NOT EXISTS (                     -- Make sure not already migrated.
            SELECT 1
              FROM payment_instructions pi
             WHERE t.slug = pi.team
               AND pi.ctime < t.ctime
	     )
""")

for team in teams:
    try:
        ntips = team.migrate_tips()
        print("Migrated {} tip(s) for '{}'".format(ntips, team.slug))
    except AlreadyMigrated:
        print("'%s' already migrated." % team.slug)

print("Done.")

--- 
+++ 
@@ -6,14 +6,15 @@
 teams = db.all("""
     SELECT distinct ON (t.slug) t.*::teams
       FROM teams t
-      JOIN tips ON t.owner = tips.tippee    -- Only fetch teams whose owner have tips.
-     WHERE t.is_approved IS TRUE            -- Only fetch approved teams.
-       AND NOT EXISTS (                     -- Make sure not already migrated.
+      JOIN tips ON t.owner = tips.tippee    -- Only fetch teams whose owners had tips under Gratipay 1.0
+     WHERE t.is_approved IS TRUE            -- Only fetch approved teams
+       AND NOT EXISTS (                     -- Make sure tips haven't been migrated for any teams with same owner
             SELECT 1
               FROM payment_instructions pi
-             WHERE t.slug = pi.team
-               AND pi.ctime < t.ctime
-	     )
+              JOIN teams t2 ON t2.slug = pi.team
+             WHERE t2.owner = t.owner
+               AND pi.ctime < t2.ctime
+       )
 """)
 
 for team in teams:
Exclude teams if owner has other teams with migrated tips
