Resolving promises on resolver using ui-router
You shouldn't use $q.defer unless you have to. 

Here you can just return the promise:

Basket.fromApi = function (id) {
    return boxesResource.get({
        id: id
    }, function (response) {
        // various manipulation here with the response...
        return new Basket(...));
    });
};


You could really clean up the resolve by creating a new service:

State

.state('catalogue', {
    resolve: {
        boxCreateData: function($stateParams, boxCreateService) {
             return boxCreateService.getBoxCreateData($stateParams.id);
        }
    }
})


Service

app.service('boxCreateService', function(Basket, Customer) {
    this.getBoxCreateData = function(id) {
        return Basket.fromApi(id)
                .then(function (basket) {
                    return Customer.fromApi(basket.getCustomer())
                        .then(function (customer) {
                            return {
                                basket: basket,
                                customer: customer
                            };
                    });
                });
    };
});


There's not much you can do to avoid two nested promises here. You need the customer ID before you can get the customer. 

More on the deferred antipattern.