def createDepedenciesOfCompany(self, user, newCompany):

        # CompanyProfileSerializer().create_default_company_profile(newCompany.id, user, newCompany.name)
        chartOfNewUser = ChartSerializer().create_default_chart(newCompany)
        newMember = {
            "chart": chartOfNewUser.id,
            "user": user,
            "company": newCompany.id,
        }
        newMemberPosition = MembersSerializer(data = newMember)
        newMemberPosition.is_valid(raise_exception=True)
        newMemberPosition.create(newMember)
        newSec = {
            'name': _("main office"),
            'dakheli_letters_format': 'yy./.xxxx',
            'sadereh_letters_format': 'yy./.1./.xxxx',
            'varede_letters_format': 'yy./.2./.xxxx',
            'dakheli_last_id': 0,
            'sadere_last_id': 0,
            'varede_last_id': 0,
            'company': newCompany.id
        }
        newSec = SecretariatSerializer(data=newSec)
        newSec.is_valid(raise_exception=True)
        newSec = newSec.create(newSec.validated_data)
        newSecPerm = {
            "chart": chartOfNewUser.id,
            "secretariat": newSec.id,
            "permission": "111",
            "default": True,
            }
        newSecPerm = SecretariatSerializerPermission(data = newSecPerm)
        newSecPerm.is_valid(raise_exception=True)
        newSecPerm = newSecPerm.create(newSecPerm.validated_data)
    def DoInvite(self, request, *args, **kwargs):
        currentUserInstance = request.user
        # checking if current is user is CEO or reciever
        invitationInstance = self.queryset.get(id=request.data['invitationID'])
        chartInstance = Chart.objects.get(id=invitationInstance.chart)
        companyInstance = Company.objects.get(id=invitationInstance.company)
        recieverProfileInstance = invitationInstance.receiver
        senderProfileInstance = invitationInstance.sender
        recieverUserInstance = MyUser.objects.get(id=recieverProfileInstance.userID)
        senderUserInstance = MyUser.objects.get(id=senderProfileInstance.userID)

        isCurrentUserApproveAsReciever = recieverUserInstance == currentUserInstance
        isCurrentUserApproveAsCEO = senderUserInstance == currentUserInstance

        if not isCurrentUserApproveAsCEO and not isCurrentUserApproveAsReciever:
            return Response({"message": _("You are not allowed to perform this operation")},
                            status=status.HTTP_401_UNAUTHORIZED)

        # partial update is here
        # it means we have to update an position
        if invitationInstance.isEmpty:
            positionInstance = Position.objects.get(id=invitationInstance.positionID)
            updated = {
                "user": recieverUserInstance.id,
                "post_date": datetime.now()
            }
            posSerializer = MembersSerializer(instance=positionInstance, data=updated, partial=True)
            posSerializer.is_valid(raise_exception=True)
            posSerializer.update(instance=positionInstance, validated_data=posSerializer.validated_data)
            invitationInstance.delete()
            return Response({}, status=status.HTTP_200_OK)

        newMember = {
            "company": companyInstance.id,
            "chart": chartInstance.id,
            "user": recieverUserInstance.id
        }
        posSerializer = MembersSerializer(data=newMember)
        posSerializer.is_valid(raise_exception=True)
        posSerializer.create(posSerializer.validated_data)
        invitationInstance.delete()
        return Response({}, status=status.HTTP_200_OK)