private JobStates domainCancel(Job job)
        {
            OrderItem oi = Provider.Database.Read <OrderItem>("Id={0}", job.RelatedEntityId);

            if (oi == null)
            {
                throw new APIException("OrderItem not found. refNo: " + job.RelatedEntityId);
            }

            MemberProduct mp = Provider.Database.Read <MemberProduct>("OrderItemId = {0}", oi.Id);

            if (mp == null)
            {
                throw new APIException("Critical error: OrderItem exists but MemberProduct doesn't, for orderItem : " + oi.Id);
            }

            MemberDomain md = Provider.Database.Read <MemberDomain>("Id = {0}", mp.Id);

            if (md == null)
            {
                throw new APIException("Critical error: MemberProduct exists but MemberDomain doesn't, for memberProduct : " + mp.Id);
            }

            if (mp.StartDate < Provider.Database.Now.AddDays(-5))
            {
                throw new APIException("You can cancel your domain and refund in the first 5 days of your domain registration.");
            }

            var eppApi = new EppAPI();

            eppApi.DomainDelete(new DealerSafe.DTO.Epp.Request.ReqDomainDelete
            {
                DomainName = md.DomainName
            });

            md.Delete();
            mp.Delete();

            oi.Cancel();

            return(JobStates.Done);
        }