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.")

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.")

Exclude teams if owner has other teams with migrated tips
Exclude teams if owner has other teams with migrated tips

  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.
+       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.
+      WHERE t.is_approved IS TRUE            -- Only fetch approved teams
-        AND NOT EXISTS (                     -- Make sure not already migrated.
+        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
+               JOIN teams t2 ON t2.slug = pi.team
+              WHERE t2.owner = t.owner
-                AND pi.ctime < t.ctime
+                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.")
  
Exclude teams if owner has other teams with migrated tips
## Code Before:
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.")

## Instruction:
Exclude teams if owner has other teams with migrated tips
## Code After:
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.")
