ops_bill.go raw

   1  // Copyright 2022-2025 The sacloud/iaas-api-go Authors
   2  //
   3  // Licensed under the Apache License, Version 2.0 (the "License");
   4  // you may not use this file except in compliance with the License.
   5  // You may obtain a copy of the License at
   6  //
   7  //      http://www.apache.org/licenses/LICENSE-2.0
   8  //
   9  // Unless required by applicable law or agreed to in writing, software
  10  // distributed under the License is distributed on an "AS IS" BASIS,
  11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12  // See the License for the specific language governing permissions and
  13  // limitations under the License.
  14  
  15  package fake
  16  
  17  import (
  18  	"context"
  19  	"time"
  20  
  21  	"github.com/sacloud/iaas-api-go"
  22  	"github.com/sacloud/iaas-api-go/types"
  23  )
  24  
  25  // ByContract is fake implementation
  26  func (o *BillOp) ByContract(ctx context.Context, accountID types.ID) (*iaas.BillByContractResult, error) {
  27  	results, _ := find(o.key, iaas.APIDefaultZone, nil)
  28  	var values []*iaas.Bill
  29  	for _, res := range results {
  30  		dest := &iaas.Bill{}
  31  		copySameNameField(res, dest)
  32  		values = append(values, dest)
  33  	}
  34  	return &iaas.BillByContractResult{
  35  		Total: len(results),
  36  		Count: len(results),
  37  		From:  0,
  38  		Bills: values,
  39  	}, nil
  40  }
  41  
  42  // ByContractYear is fake implementation
  43  func (o *BillOp) ByContractYear(ctx context.Context, accountID types.ID, year int) (*iaas.BillByContractYearResult, error) {
  44  	results, _ := find(o.key, iaas.APIDefaultZone, nil)
  45  	var values []*iaas.Bill
  46  	for _, res := range results {
  47  		dest := &iaas.Bill{}
  48  		copySameNameField(res, dest)
  49  		if dest.Date.Year() == year {
  50  			values = append(values, dest)
  51  		}
  52  	}
  53  	return &iaas.BillByContractYearResult{
  54  		Total: len(results),
  55  		Count: len(results),
  56  		From:  0,
  57  		Bills: values,
  58  	}, nil
  59  }
  60  
  61  // ByContractYearMonth is fake implementation
  62  func (o *BillOp) ByContractYearMonth(ctx context.Context, accountID types.ID, year int, month int) (*iaas.BillByContractYearMonthResult, error) {
  63  	results, _ := find(o.key, iaas.APIDefaultZone, nil)
  64  	var values []*iaas.Bill
  65  	for _, res := range results {
  66  		dest := &iaas.Bill{}
  67  		copySameNameField(res, dest)
  68  		if dest.Date.Year() == year && int(dest.Date.Month()) == month {
  69  			values = append(values, dest)
  70  		}
  71  	}
  72  	return &iaas.BillByContractYearMonthResult{
  73  		Total: len(results),
  74  		Count: len(results),
  75  		From:  0,
  76  		Bills: values,
  77  	}, nil
  78  }
  79  
  80  // Read is fake implementation
  81  func (o *BillOp) Read(ctx context.Context, id types.ID) (*iaas.BillReadResult, error) {
  82  	results, _ := find(o.key, iaas.APIDefaultZone, nil)
  83  	var values []*iaas.Bill
  84  	for _, res := range results {
  85  		dest := &iaas.Bill{}
  86  		copySameNameField(res, dest)
  87  		if dest.ID == id {
  88  			values = append(values, dest)
  89  		}
  90  	}
  91  	return &iaas.BillReadResult{
  92  		Total: len(results),
  93  		Count: len(results),
  94  		From:  0,
  95  		Bills: values,
  96  	}, nil
  97  }
  98  
  99  // Details is fake implementation
 100  func (o *BillOp) Details(ctx context.Context, memberCode string, id types.ID) (*iaas.BillDetailsResult, error) {
 101  	rawResults := ds().Get(o.key+"Details", iaas.APIDefaultZone, id)
 102  	if rawResults == nil {
 103  		return nil, newErrorNotFound(o.key+"Details", id)
 104  	}
 105  
 106  	results := rawResults.(*[]*iaas.BillDetail)
 107  	var values []*iaas.BillDetail
 108  	for _, res := range *results {
 109  		dest := &iaas.BillDetail{}
 110  		copySameNameField(res, dest)
 111  		values = append(values, dest)
 112  	}
 113  
 114  	return &iaas.BillDetailsResult{
 115  		Total:       len(*results),
 116  		Count:       len(*results),
 117  		From:        0,
 118  		BillDetails: values,
 119  	}, nil
 120  }
 121  
 122  // DetailsCSV is fake implementation
 123  func (o *BillOp) DetailsCSV(ctx context.Context, memberCode string, id types.ID) (*iaas.BillDetailCSV, error) {
 124  	rawResults := ds().Get(o.key+"Details", iaas.APIDefaultZone, id)
 125  	if rawResults == nil {
 126  		return nil, newErrorNotFound(o.key+"Details", id)
 127  	}
 128  
 129  	results := rawResults.(*[]*iaas.BillDetail)
 130  	for _, res := range *results {
 131  		dest := &iaas.BillDetail{}
 132  		copySameNameField(res, dest)
 133  	}
 134  
 135  	return &iaas.BillDetailCSV{
 136  		Count:       len(*results),
 137  		ResponsedAt: time.Now(),
 138  		Filename:    "sakura_cloud_20yy_mm.csv",
 139  		RawBody:     "this,is,dummy,header\r\nthis,is,dummy,body",
 140  		HeaderRow:   []string{"this", "is", "dummy", "header"},
 141  		BodyRows: [][]string{
 142  			{
 143  				"this", "is", "dummy", "body",
 144  			},
 145  		},
 146  	}, nil
 147  }
 148