github.com/companieshouse/insolvency-api@v0.0.0-20231024103413-440c973d9e9b/service/soa_service.go (about)

     1  package service
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"strings"
     7  
     8  	"github.com/companieshouse/chs.go/log"
     9  	"github.com/companieshouse/insolvency-api/dao"
    10  	"github.com/companieshouse/insolvency-api/models"
    11  	"github.com/companieshouse/insolvency-api/utils"
    12  )
    13  
    14  // ValidateStatementDetails checks that the incoming statement details are valid
    15  func ValidateStatementDetails(svc dao.Service, statementDao *models.StatementOfAffairsResourceDao, transactionID string, req *http.Request) (string, error) {
    16  	var errs []string
    17  
    18  	if statementDao == nil {
    19  		err := fmt.Errorf("nil DAO passed to service for validation")
    20  		log.ErrorR(req, err)
    21  		return "", err
    22  	}
    23  
    24  	// Check that the attachment has been submitted correctly
    25  	if len(statementDao.Attachments) == 0 {
    26  		errs = append(errs, "please supply at least one attachment")
    27  	}
    28  	if len(statementDao.Attachments) > 2 {
    29  		errs = append(errs, "please supply a maximum of two attachments")
    30  	}
    31  
    32  	// Check if statement date supplied is in the future or before company was incorporated
    33  	insolvencyResource, err := svc.GetInsolvencyResource(transactionID)
    34  	if err != nil {
    35  		err = fmt.Errorf("error getting insolvency resource from DB: [%s]", err)
    36  		log.ErrorR(req, err)
    37  		return "", err
    38  	}
    39  	// Retrieve company incorporation date
    40  	incorporatedOn, err := GetCompanyIncorporatedOn(insolvencyResource.Data.CompanyNumber, req)
    41  	if err != nil {
    42  		err = fmt.Errorf("error getting company details from DB: [%s]", err)
    43  		log.ErrorR(req, err)
    44  		return "", err
    45  	}
    46  
    47  	ok, err := utils.IsDateBetweenIncorporationAndNow(statementDao.StatementDate, incorporatedOn)
    48  	if err != nil {
    49  		err = fmt.Errorf("error parsing date: [%s]", err)
    50  		log.ErrorR(req, err)
    51  		return "", err
    52  	}
    53  	if !ok {
    54  		errs = append(errs, fmt.Sprintf("statement_date [%s] should not be in the future or before the company was incorporated", statementDao.StatementDate))
    55  	}
    56  
    57  	return strings.Join(errs, ", "), nil
    58  }