Esempio n. 1
0
        public ReturnObject <int> ConfirmPayment(ConfirmPaymentObject confirmPaymentObject)
        {
            ReturnObject <int> response;

            if (authManager.CanDoOperation(confirmPaymentObject.ClientId, Constants.OPERATION_PAYMENT_CONFIRM))
            {
                response = paymentManager.ConfirmPayment(confirmPaymentObject, DateTime.Now);
            }
            else
            {
                log.WarnFormat("The client: {0} tried to access to ConfirmPayment and does not has access", confirmPaymentObject.ClientId);
                response = new ReturnObject <int>(0);
                response.addWarnMsg("Access denied");
                response.Code = ReturnObject <int> .RETURN_CODE_UNAUTHORIZED;
            }
            return(response);
        }
Esempio n. 2
0
        public ReturnObject <bool> ValidateCredentials(String user, String pass)
        {
            ReturnObject <bool> response;

            try {
                //create a
                response = new ReturnObject <bool>(authManager.HasAccess(user, pass));
                if (!response.Data)
                {
                    log.WarnFormat("Wrong credentials validation user: {0} password {1}", user, pass);
                }
                response.Code = ReturnObject <bool> .RETURN_CODE_OK;
            } catch (Exception e)
            {
                log.ErrorFormat("Exception in ValidateCredentials: {0} for user {1} password {2} message: {3} trace: {4}", e, user, pass, e.Message, e.StackTrace);
                response      = new ReturnObject <bool>(false);
                response.Code = ReturnObject <bool> .RETURN_CODE_INTERNAL_ERROR;
            }
            return(response);
        }
        public ReturnObject <int> CreatePayment(CreatePaymentObject createPaymentObject, DateTime date)
        {
            //create the object to return later
            ReturnObject <int> response = new ReturnObject <int>(0);

            try {
                if (String.IsNullOrWhiteSpace(createPaymentObject.InvoiceNumber) || createPaymentObject.Amount <= 0)
                {
                    log.InfoFormat("invoice {0} or amount {1} are empty", createPaymentObject.InvoiceNumber, createPaymentObject.Amount);
                    response.addErrorMsg(Properties.Settings.Default.errorMessageMisingInfo);
                    response.Code = ReturnObject <int> .RETURN_CODE_BAD_REQUEST;
                    return(response);
                }

                //check if the entities are in the db
                Gateway  gateway  = paymentDao.GetGateway(createPaymentObject.GatewayId);
                Currency currency = paymentDao.GetCurrencyById(createPaymentObject.CurrencyId);
                Client   client   = paymentDao.GetClientById(createPaymentObject.ClientId);

                //of one of them are missing exit with message
                if (gateway == null || currency == null || client == null)
                {
                    log.InfoFormat("gateway {0} currency {1} or client {2} are null", gateway, currency, client);
                    response.addErrorMsg(Properties.Settings.Default.errorMessageMisingData);
                    response.Code = ReturnObject <int> .RETURN_CODE_BAD_REQUEST;
                    return(response);
                }

                PaymentStatus statusNew = paymentDao.GetPaymentStatusById(Constants.PAYMENT_STATUS_NEW_ID);
                if (statusNew == null)
                {
                    //if cannot found status exit with error message
                    log.ErrorFormat("cound not found PaymentStatus {0}", Constants.PAYMENT_STATUS_NEW_ID);
                    response.addErrorMsg(Properties.Settings.Default.errorMessageInternalError);
                    response.Code = ReturnObject <int> .RETURN_CODE_INTERNAL_ERROR;
                    return(response);
                }

                //check if invoice exist in db
                Invoice invoice = paymentDao.GetInvoiceByNumber(createPaymentObject.InvoiceNumber);
                if (invoice != null)
                {
                    //read payment settings
                    int maxPaymentsPerInvoice;
                    if (settingsManager.GetIntSetting(Constants.PAYMENTS_INVOICE_MAX, out maxPaymentsPerInvoice))
                    {
                        //if current payments of invoice are gratear than equal max allowed, then exit with error message
                        if (paymentDao.GetApprovedPaymentsByInvoice(invoice).Count >= maxPaymentsPerInvoice && !(maxPaymentsPerInvoice == Constants.PAYMENTS_INVOICE_INFINITY))
                        {
                            log.InfoFormat("the invoice {0} have reached max payments {1}", invoice, maxPaymentsPerInvoice);
                            response.addErrorMsg(Properties.Settings.Default.errorMessageMaxPaymentsReached);
                            response.Code = ReturnObject <int> .RETURN_CODE_PRECONDITION_FAILED;
                            return(response);
                        }
                        else
                        {
                            //invoice is actually in db so I only have to create payment
                            Payment creation = paymentDao.CreatePayment(createPaymentObject.Amount, createPaymentObject.Comment, date, currency, invoice, client, gateway, statusNew);
                            response.set(creation.payment_id);
                            response.Code = ReturnObject <int> .RETURN_CODE_CREATED;
                            log.InfoFormat("the payment {0} have been created and added to the invoice {1}", creation, invoice);
                            return(response);
                        }
                    }
                    else
                    {
                        //if cannot get max payments allowed per invoice exit with error message
                        log.ErrorFormat("cound not found setting {0}", Constants.PAYMENTS_INVOICE_MAX);
                        response.addErrorMsg(Properties.Settings.Default.errorMessageInternalError);
                        response.Code = ReturnObject <int> .RETURN_CODE_INTERNAL_ERROR;
                        return(response);
                    }
                }
                else
                {
                    // the invoice is not in the db, so have to create invoice and payment in same transaction.
                    Payment creation = paymentDao.CreatePaymentAndInvoice(createPaymentObject.InvoiceNumber, createPaymentObject.ClientId, createPaymentObject.CurrencyId, date, createPaymentObject.Amount, createPaymentObject.Comment, gateway, statusNew);
                    //Payment creation = paymentDao.CreatePayment(createPaymentObject.Amount, createPaymentObject.Comment, date, currency, invoice, client, gateway, statusNew);
                    response.set(creation.payment_id);
                    response.Code = ReturnObject <int> .RETURN_CODE_CREATED;
                    log.InfoFormat("the payment {0} have been created", creation);
                    return(response);
                }
                //handling validation errors
            } catch (System.Data.Entity.Validation.DbEntityValidationException e)
            {
                log.ErrorFormat("exception {0} was thrown when CreatePayment, message: {1} trace: {2}", e, e.Message, e.StackTrace);
                response.addWarnMsg(Properties.Settings.Default.warnFieldsNotValid);
                response.Code = ReturnObject <int> .RETURN_CODE_BAD_REQUEST;
                return(response);
            } catch (Exception e)
            {
                log.ErrorFormat("exception {0} was thrown when CreatePayment, message: {1} trace: {2}", e, e.Message, e.StackTrace);
                response.addErrorMsg(Properties.Settings.Default.errorMessageInternalError);
                response.Code = ReturnObject <int> .RETURN_CODE_INTERNAL_ERROR;
                return(response);
            }
        }
        public ReturnObject <int> ConfirmPayment(ConfirmPaymentObject confirmPaymentObject, DateTime date)
        {
            //create the object to return later
            ReturnObject <int> response = new ReturnObject <int>(0);

            try
            {
                //check if have all the data needed in the object
                if (String.IsNullOrWhiteSpace(confirmPaymentObject.GatewayReference) || String.IsNullOrWhiteSpace(confirmPaymentObject.GatewayResponse))
                {
                    log.InfoFormat("reference {0} or response{1} are empty", confirmPaymentObject.GatewayReference, confirmPaymentObject.GatewayResponse);
                    response.addErrorMsg(Properties.Settings.Default.errorMessageMisingInfo);
                    response.Code = ReturnObject <int> .RETURN_CODE_BAD_REQUEST;
                    return(response);
                }

                //check if the entities are in the db
                PaymentStatus status  = paymentDao.GetPaymentStatusById(confirmPaymentObject.StatusId);
                Payment       payment = paymentDao.GetPaymentById(confirmPaymentObject.PaymentId);
                Client        client  = paymentDao.GetClientById(confirmPaymentObject.ClientId);

                //of one of them are missing exit with message
                if (status == null || client == null)
                {
                    log.InfoFormat("status {0} or client {1} are null", status, client);
                    response.addErrorMsg(Properties.Settings.Default.errorMessageMisingData);
                    response.Code = ReturnObject <int> .RETURN_CODE_BAD_REQUEST;
                    return(response);
                }

                //check if the payment got exist in the db, if not exit with message
                if (payment == null)
                {
                    log.InfoFormat("payment id {0} not found", confirmPaymentObject.PaymentId);
                    response.addErrorMsg(Properties.Settings.Default.errorMessagePaymentNotFound);
                    response.Code = ReturnObject <int> .RETURN_CODE_NOT_FOUND;
                    return(response);
                }

                //chack that the status of the payment is the one that can be changed
                if (payment.payment_status_id != Constants.PAYMENT_STATUS_NEW_ID)
                {
                    log.WarnFormat("payment {0} has not status new", payment);
                    response.addErrorMsg(Properties.Settings.Default.errorMessageUnchangebleStatus);
                    response.Code = ReturnObject <int> .RETURN_CODE_PRECONDITION_FAILED;
                    return(response);
                }

                //create the GatewayPaymentData and confirm the payment
                Payment updated = paymentDao.ConfirmPaymentAddingGatewayPaymentData(payment, status, confirmPaymentObject.GatewayResponse, confirmPaymentObject.GatewayReference, date);

                response.set(updated.payment_id);
                response.Code = ReturnObject <int> .RETURN_CODE_OK;
                log.InfoFormat("the payment {0} have been confirm with the status {1}", updated, status);
                return(response);
            }
            //handling validation errors
            catch (System.Data.Entity.Validation.DbEntityValidationException e)
            {
                log.ErrorFormat("exception {0} was thrown when ConfirmPayment, message: {1} trace: {2}", e, e.Message, e.StackTrace);
                response.addWarnMsg(Properties.Settings.Default.warnFieldsNotValid);
                response.Code = ReturnObject <int> .RETURN_CODE_BAD_REQUEST;
                return(response);
            } catch (Exception e)
            {
                log.ErrorFormat("exception {0} was thrown when ConfirmPayment, message: {1} trace: {2}", e, e.Message, e.StackTrace);
                response.addErrorMsg(Properties.Settings.Default.errorMessageInternalError);
                response.Code = ReturnObject <int> .RETURN_CODE_INTERNAL_ERROR;
                return(response);
            }
        }