class ratioPaymentFiscalize(helpers.BaseField): def resolve(self, _, info, payment_id): payment = models.Payment.objects.get(pk=payment_id) payment.fiscalize() return True permissions = [user_perm('ratio.manage'), user_perm('kkm.kkmserver')] args = {'payment_id': 'ID!'} result = bool
class ofdFiscalDrives(helpers.BaseField): def resolve(self, _, info): return models.OfdFiscalDrive.objects.all() permissions = [user_perm('kkm.ofd')] result = g.NNList(types.OfdFiscalDrive)
class promocodes_count(helpers.BaseField): def resolve(self, obj, info, **pager): return obj.promocodes.count() permissions = [user_perm('ratio.manage')] result = int
class updateRatioTicketType(helpers.BaseFieldWithInput): def resolve(self, _, info, input): ticket_type = models.TicketType.objects.get(uuid=input['id']) for field in ( 'price', 'name', 'discount_by_email', 'discount_percent_by_email', ): if input.get(field) is not None: setattr(ticket_type, field, input[field]) ticket_type.full_clean() ticket_type.save() return ticket_type permissions = [user_perm('ratio.manage')] input = { 'id': 'ID!', 'price': Optional[int], 'name': Optional[str], 'discount_by_email': Optional[int], 'discount_percent_by_email': Optional[int], } result = g.NN(types.RatioTicketType)
class updateRatioTicket(helpers.BaseFieldWithInput): def resolve(self, _, info, input): ticket = models.Ticket.objects.get(pk=input['id']) for field in ( 'first_name', 'last_name', 'notion_link', ): if input.get(field) is not None: setattr(ticket, field, input[field]) if input.get('ticket_type') is not None: ticket_type_id = input['ticket_type'] ticket_type = models.TicketType.objects.get(uuid=ticket_type_id) ticket.ticket_type = ticket_type ticket.full_clean() ticket.save() return ticket permissions = [user_perm('ratio.manage')] input = { 'id': 'ID!', 'first_name': Optional[str], 'last_name': Optional[str], 'notion_link': Optional[str], 'ticket_type': 'ID', } result = g.NN(types.RatioTicket)
class ratioAddTicket(helpers.BaseFieldWithInput): def resolve(self, _, info, input): training_id = input.pop('training') training = models.Training.objects.get(pk=training_id) ticket_type_id = input.pop('ticket_type', None) ticket_type = None if ticket_type_id: ticket_type = models.TicketType.objects.get(uuid=ticket_type_id) ticket = models.Ticket.objects.create( **input, training=training, ticket_type=ticket_type, ) return ticket permissions = [user_perm('ratio.manage')] input = { 'training': 'ID!', # TODO - remove and derive from ticket_type 'ticket_type': 'ID', # TODO - required 'email': str, 'first_name': Optional[str], 'last_name': Optional[str], 'payment_amount': int, 'ticket_class': Optional[str], 'comment': Optional[str], } result = g.NN(types.RatioTicket)
def staffGrantGooglePermissionsToMember(helper): @check_permissions([user_perm('staff.manage')]) def resolve(obj, info, id): member = models.Member.objects.get(pk=id) member.grant_google_permissions() return True return g.Field(g.Boolean, args=g.arguments({'id': 'ID!'}), resolve=resolve)
def authPermissionsAll(helper): @check_permissions([user_perm("auth.audit")]) def resolve(_, info): return auth_models.Permission.objects.all() Result = g.NNList(types.AuthPermission) return g.Field(Result, resolve=resolve)
class ofdDocuments(helpers.BaseField): def resolve(self, _, info, **pager): return models.OfdDocument.objects.relay_page(**pager) permissions = [user_perm('kkm.ofd')] args = helpers.connection_args() result = g.NN(types.OfdDocumentConnection)
class closeKkmShift(helpers.BaseField): def resolve(self, _, info): models.Controller.load().close_shift() return {'ok': True} permissions = [user_perm('kkm.kkmserver')] result = g.NN(basic_types.BasicResult)
class deleteAuthGroup(helpers.BaseField): def resolve(self, _, info, id): group = auth_models.Group.objects.get(pk=id) group.delete() return {'ok': True} permissions = [user_perm('auth.audit')] args = {'id': 'ID!'} result = g.NN(basic_types.BasicResult)
class createAuthGroup(helpers.BaseField): def resolve(self, _, info, name): group = auth_models.Group.objects.create(name=name) group.full_clean() return group permissions = [user_perm('auth.audit')] args = {'name': str} result = g.NN(types.AuthGroup)
class zadarmaSetMemberForPbxCall(helpers.BaseField): permissions = [user_perm('zadarma.admin')] args = {'member_id': 'ID!', 'pbx_call_id': 'ID!'} result = bool def resolve(self, _, info, pbx_call_id, member_id): pbx_call = models.PbxCall.objects.get(pk=pbx_call_id) pbx_call.set_staff_member_by_id(member_id) return True
class promocodes(helpers.BaseField): def resolve(self, obj, info, **pager): return models.Promocode.objects.filter( ticket_type_promocodes=obj.pk).relay_page(**pager) permissions = [user_perm('ratio.manage')] args = helpers.connection_args() result = g.NN(RatioPromocodeConnection)
class ratioPaymentDelete(helpers.BaseField): def resolve(self, _, info, payment_id): payment = models.Payment.objects.get(pk=payment_id) payment.delete() return {'ok': True} permissions = [user_perm('ratio.manage')] args = {'payment_id': 'ID!'} result = g.NN(basic_types.BasicResult)
class ratioTrainingSyncParticipantsToMailchimp(helpers.BaseField): def resolve(self, _, info, training_id): training = models.Training.objects.get(pk=training_id) training2mailchimp(training) return True permissions = [user_perm('ratio.manage')] args = {'training_id': 'ID!'} result = bool
class cashierRedeemPayment(helpers.BaseField): def resolve(self, _, info, id): payment = models.Payment.objects.get(pk=id) payment.redeem() return True permissions = [user_perm('cashier.redeem')] args = g.arguments({'id': 'ID!'}) result = g.Boolean
class authRemoveUserFromGroup(helpers.BaseField): def resolve(self, _, info, group_id, user_id): group = auth_models.Group.objects.get(pk=group_id) user = get_user_model().objects.get(pk=user_id) group.user_set.remove(user) return True permissions = [user_perm('auth.audit')] args = {'group_id': 'ID!', 'user_id': 'ID!'} result = bool
class removePermissionFromAuthGroup(helpers.BaseField): def resolve(self, _, info, group_id, perm): group = auth_models.Group.objects.get(pk=group_id) permission = perm_to_permission(perm) group.permissions.remove(permission) return group permissions = [user_perm('auth.audit')] args = {'group_id': 'ID!', 'perm': str} result = g.NN(types.AuthGroup)
class kkmStatus(helpers.BaseField): def resolve(self, _, info): return { 'last_shift_closed': models.Controller.load().last_shift_closed, } permissions = [user_perm('kkm.kkmserver')] result = { 'last_shift_closed': Optional[str], }
class deleteRatioTicketType(helpers.BaseFieldWithInput): def resolve(self, _, info, input): ticket_type = models.TicketType.objects.get( uuid=input['id'], ) ticket_type.delete() return {'ok': True} permissions = [user_perm('ratio.manage')] input = { 'id': 'ID!', } result = g.NN(basic_types.BasicResult)
class ratioDeleteTraining(helpers.BaseFieldWithInput): # TODO - reimplement with django_utils.DeleteMutation after we implement lookup_field in DeleteMutation def resolve(self, _, info, input): training = models.Training.objects.get(slug=input['slug']) training.delete() return {'ok': True} permissions = [user_perm('ratio.manage')] input = { 'slug': str, } result = g.NN(basic_types.BasicResult)
class ratioPaymentFiscalizedManually(helpers.BaseField): def resolve(self, _, info, payment_id): payment = models.Payment.objects.get(pk=payment_id) assert payment.fiscalization_status in ('todo', 'in_progress') payment.fiscalization_status = 'fiscalized' payment.full_clean() payment.save() return {'payment': payment} permissions = [user_perm('ratio.manage')] args = {'payment_id': 'ID!'} result = { 'payment': g.NN(types.RatioPayment), }
class setRatioTicketNotionLink(helpers.BaseFieldWithInput): def resolve(self, _, info, input): ticket = models.Ticket.objects.get(pk=input['id']) ticket.set_notion_link(input['notion_link']) return ticket permissions = [user_perm('ratio.manage')] input = { 'id': 'ID!', 'notion_link': str, } result = g.NN(types.RatioTicket)
class ofdShifts(helpers.BaseField): def resolve(self, _, info, filter=None, **pager): qs = models.OfdShift.objects.all() if filter: if filter.get('open_only'): qs = qs.filter(close_dt__isnull=True) return qs.relay_page(**pager) permissions = [user_perm('kkm.ofd')] FilterInput = g.InputObjectType( 'OfdShiftsFilterInput', g.input_fields({'open_only': Optional[bool]})) args = {**helpers.connection_args(), 'filter': FilterInput} result = g.NN(types.OfdShiftConnection)
class cashierCreatePayment(helpers.BaseFieldWithInput): def resolve(self, _, info, input): user = get_user_model().objects.get(pk=input['whom']) models.Payment.objects.create( whom=user, amount=input['amount'], comment=input['comment'], ) return True permissions = [user_perm('cashier.create')] input = {'amount': int, 'whom': 'ID!', 'comment': str} result = g.Boolean
class external_accounts_field(helpers.BaseField): def resolve(self, obj, info): services = external_services_registry.all_services() result = [] for s in services: account = s.user_account(obj) if account: result.append(account) return result permissions = [user_perm('external_services.view_access')] result = g.NNList(ExternalServiceAccount)
class ratioTrainingAddDay(helpers.BaseFieldWithInput): def resolve(self, _, info, input): training = models.Training.objects.get(slug=input['training_slug']) date_str = input['date'] date = datetime.datetime.strptime(date_str, '%Y-%m-%d').date() training.add_day(date) return True permissions = [user_perm('ratio.manage')] input = { 'training_slug': str, 'date': str, } result = bool
class updateRatioTraining(django_utils.UpdateMutation): model = models.Training fields = [ 'name', # 'slug', 'training_type', 'date', 'telegram_link', 'discount_by_email', 'discount_percent_by_email', 'promocode_email', 'new_ticket_email', 'notion_created_email', ] permissions = [user_perm('ratio.manage')] result_type = types.RatioTraining
class ratioTrainingCopyScheduleFrom(helpers.BaseFieldWithInput): def resolve(self, _, info, input): from_training = models.Training.objects.get( slug=input['from_training_slug']) to_training = models.Training.objects.get( slug=input['to_training_slug']) to_training.copy_schedule_from(from_training) return True permissions = [user_perm('ratio.manage')] input = { 'from_training_slug': str, 'to_training_slug': str, } result = bool