class ClanSendInvitesWindow(SendInvitesWindow, UsersInfoHelper, ClanListener):

    def __init__(self, ctx):
        super(ClanSendInvitesWindow, self).__init__(ctx)
        raise 'clanDbID' in ctx or AssertionError
        self.__clanDbID = ctx['clanDbID']
        self._cooldownHelper = CooldownHelper((CLAN_REQUESTED_DATA_TYPE.CREATE_INVITES,), self._handleSetCoolDown, CoolDownEvent.CLAN)
        self.__cooldown = None
        return

    @process
    def sendInvites(self, accountsToInvite, comment):
        self.as_showWaitingS(WAITING.CLANS_INVITES_SEND, {})
        accountsToInvite = [ int(userDbID) for userDbID in accountsToInvite ]
        ctx = clan_ctx.CreateInviteCtx(self.__clanDbID, accountsToInvite, comment)
        self.__cooldown = ctx.getCooldown()
        result = yield self.clansCtrl.sendRequest(ctx)
        successAccounts = [ item.getAccountDbID() for item in ctx.getDataObj(result.data) ]
        failedAccounts = set(accountsToInvite) - set(successAccounts)
        if successAccounts:
            accountNames = [ self.getUserName(userDbID) for userDbID in successAccounts ]
            SystemMessages.pushMessage(clans_fmts.getInvitesSentSysMsg(accountNames))
        if failedAccounts:
            accountNames = [ self.getUserName(userDbID) for userDbID in failedAccounts ]
            SystemMessages.pushMessage(clans_fmts.getInvitesNotSentSysMsg(accountNames), type=SystemMessages.SM_TYPE.Error)
        self.as_hideWaitingS()

    def _populate(self):
        super(ClanSendInvitesWindow, self)._populate()
        self._cooldownHelper.start()
        self.as_setInvalidUserTagsS([USER_TAG.IGNORED,
         USER_TAG.CURRENT,
         USER_TAG.CLAN_MEMBER,
         USER_TAG.OTHER_CLAN_MEMBER])
        self.as_enableMassSendS(False, CLANS.CLANPROFILE_SENDINVITESWINDOW_TOOLTIP_MASSSENDBLOCKED)

    def _dispose(self):
        self._cooldownHelper.stop()
        super(ClanSendInvitesWindow, self)._dispose()

    def _initCooldown(self):
        pass

    def _finiCooldown(self):
        pass

    def _handleSetCoolDown(self, isInCooldown):
        if not (isInCooldown and self.__cooldown is not None):
            raise AssertionError
            self.as_onReceiveSendInvitesCooldownS(self.__cooldown)
        return

    def _getTitle(self):
        return i18n.makeString(CLANS.CLANPROFILE_SENDINVITESWINDOW_TITLE)
 def __init__(self, ctx):
     super(ClanSendInvitesWindow, self).__init__(ctx)
     raise 'clanDbID' in ctx or AssertionError
     self.__clanDbID = ctx['clanDbID']
     self._cooldownHelper = CooldownHelper((CLAN_REQUESTED_DATA_TYPE.CREATE_INVITES,), self._handleSetCoolDown, CoolDownEvent.CLAN)
     self.__cooldown = None
     return