def refund_campaign(link, camp, billable_amount, billable_impressions): refund_amount = get_refund_amount(camp, billable_amount) if refund_amount <= 0: return owner = Account._byID(camp.owner_id, data=True) try: success = authorize.refund_transaction(owner, camp.trans_id, camp._id, refund_amount) except authorize.AuthorizeNetException as e: text = "%s $%s refund failed" % (camp, refund_amount) PromotionLog.add(link, text) g.log.debug(text + " (response: %s)" % e) return text = "%s completed with $%s billable (%s impressions @ $%s)." " %s refunded." % ( camp, billable_amount, billable_impressions, camp.cpm, refund_amount, ) PromotionLog.add(link, text) camp.refund_amount = refund_amount camp._commit() unset_underdelivered_campaigns(camp) emailer.refunded_promo(link)
def refund_campaign(link, camp, refund_amount, billable_amount, billable_impressions): owner = Account._byID(camp.owner_id, data=True) success, reason = authorize.refund_transaction( owner, camp.trans_id, camp._id, refund_amount) if not success: text = ('%s $%s refund failed' % (camp, refund_amount)) PromotionLog.add(link, text) g.log.debug(text + ' (reason: %s)' % reason) return False if billable_impressions: text = ('%s completed with $%s billable (%s impressions @ $%s).' ' %s refunded.' % (camp, billable_amount, billable_impressions, camp.bid_pennies / 100., refund_amount)) else: text = ('%s completed with $%s billable. %s refunded' % (camp, billable_amount, refund_amount)) PromotionLog.add(link, text) camp.refund_amount = refund_amount camp._commit() queries.unset_underdelivered_campaigns(camp) emailer.refunded_promo(link) return True
def refund_campaign(link, camp, refund_amount, billable_amount, billable_impressions): owner = Account._byID(camp.owner_id, data=True) success, reason = authorize.refund_transaction(owner, camp.trans_id, camp._id, refund_amount) if not success: text = ('%s $%s refund failed' % (camp, refund_amount)) PromotionLog.add(link, text) g.log.debug(text + ' (reason: %s)' % reason) return False if billable_impressions: text = ('%s completed with $%s billable (%s impressions @ $%s).' ' %s refunded.' % (camp, billable_amount, billable_impressions, camp.bid_pennies / 100., refund_amount)) else: text = ('%s completed with $%s billable. %s refunded' % (camp, billable_amount, refund_amount)) PromotionLog.add(link, text) camp.refund_amount = refund_amount camp._commit() queries.unset_underdelivered_campaigns(camp) emailer.refunded_promo(link) return True
def finalize_completed_campaigns(daysago=1): # PromoCampaign.end_date is utc datetime with year, month, day only now = datetime.datetime.now(g.tz) date = now - datetime.timedelta(days=daysago) date = date.replace(hour=0, minute=0, second=0, microsecond=0) q = PromoCampaign._query( PromoCampaign.c.end_date == date, # exclude no transaction and freebies PromoCampaign.c.trans_id > 0, data=True) campaigns = list(q) # check that traffic is up to date earliest_campaign = min(campaigns, key=lambda camp: camp.start_date) start, end = promote.get_total_run(earliest_campaign) missing_traffic = get_missing_traffic(start.replace(tzinfo=None), date.replace(tzinfo=None)) if missing_traffic: raise ValueError("Can't finalize campaigns finished on %s." "Missing traffic from %s" % (date, missing_traffic)) links = Link._byID([camp.link_id for link in links], data=True) for camp in campaigns: if hasattr(camp, 'refund_amount'): continue link = links[camp.link_id] billable_impressions = promote.get_billable_impressions(camp) billable_amount = promote.get_billable_amount(camp, billable_impressions) if billable_amount >= camp.bid: text = ('%s completed with $%s billable (%s impressions @ $%s).' % (camp, billable_amount, billable_impressions, camp.cpm)) PromotionLog.add(link, text) refund_amount = 0. else: refund_amount = camp.bid - billable_amount user = Account._byID(link.author_id, data=True) try: success = authorize.refund_transaction(user, camp.trans_id, camp._id, refund_amount) except authorize.AuthorizeNetException as e: text = ('%s $%s refund failed' % (camp, refund_amount)) PromotionLog.add(link, text) g.log.debug(text + ' (response: %s)' % e) continue text = ('%s completed with $%s billable (%s impressions @ $%s).' ' %s refunded.' % (camp, billable_amount, billable_impressions, camp.cpm, refund_amount)) PromotionLog.add(link, text) camp.refund_amount = refund_amount camp._commit()
def finalize_completed_campaigns(daysago=1): # PromoCampaign.end_date is utc datetime with year, month, day only now = datetime.datetime.now(g.tz) date = now - datetime.timedelta(days=daysago) date = date.replace(hour=0, minute=0, second=0, microsecond=0) q = PromoCampaign._query(PromoCampaign.c.end_date == date, # exclude no transaction and freebies PromoCampaign.c.trans_id > 0, data=True) campaigns = list(q) # check that traffic is up to date earliest_campaign = min(campaigns, key=lambda camp: camp.start_date) start, end = promote.get_total_run(earliest_campaign) missing_traffic = get_missing_traffic(start.replace(tzinfo=None), date.replace(tzinfo=None)) if missing_traffic: raise ValueError("Can't finalize campaigns finished on %s." "Missing traffic from %s" % (date, missing_traffic)) links = Link._byID([camp.link_id for link in links], data=True) for camp in campaigns: if hasattr(camp, 'refund_amount'): continue link = links[camp.link_id] billable_impressions = promote.get_billable_impressions(camp) billable_amount = promote.get_billable_amount(camp, billable_impressions) if billable_amount >= camp.bid: text = ('%s completed with $%s billable (%s impressions @ $%s).' % (camp, billable_amount, billable_impressions, camp.cpm)) PromotionLog.add(link, text) refund_amount = 0. else: refund_amount = camp.bid - billable_amount user = Account._byID(link.author_id, data=True) try: success = authorize.refund_transaction(user, camp.trans_id, camp._id, refund_amount) except authorize.AuthorizeNetException as e: text = ('%s $%s refund failed' % (camp, refund_amount)) PromotionLog.add(link, text) g.log.debug(text + ' (response: %s)' % e) continue text = ('%s completed with $%s billable (%s impressions @ $%s).' ' %s refunded.' % (camp, billable_amount, billable_impressions, camp.cpm, refund_amount)) PromotionLog.add(link, text) camp.refund_amount = refund_amount camp._commit()
def refund_promo(thing, user, refund): cur_refund = getattr(thing, "promo_refund", 0) refund = min(refund, thing.promote_bid - cur_refund) if refund > 0: thing.promo_refund = cur_refund + refund if authorize.refund_transaction(refund, user, thing.promote_trans_id): promotion_log(thing, "payment update: refunded '%.2f'" % refund) else: promotion_log(thing, "payment update: refund failed") if thing.promote_status in (STATUS.promoted, STATUS.finished): PromoteDates.update_bid(thing) thing._commit()
def refund_campaign(link, camp, billable_amount): refund_amount = camp.bid - billable_amount owner = Account._byID(camp.owner_id, data=True) try: success = authorize.refund_transaction(user, camp.trans_id, camp._id, refund_amount) except authorize.AuthorizeNetException as e: text = ('%s $%s refund failed' % (camp, refund_amount)) PromotionLog.add(link, text) g.log.debug(text + ' (response: %s)' % e) return text = ( '%s completed with $%s billable (%s impressions @ $%s).' ' %s refunded.' % (camp, billable_amount, billable_impressions, camp.cpm, refund_amount)) PromotionLog.add(link, text) camp.refund_amount = refund_amount camp._commit() unset_underdelivered_campaigns(camp) emailer.refunded_promo(link)