summaryrefslogtreecommitdiff
path: root/invoice/db_actions.go
blob: 0cbeec12ba32c14f41b42cc5f56dd9fa6692259c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* OpenBills-server - Server for libre billing software OpenBills-web
 * Copyright (C) 2022  Vidhu Kant Sharma <vidhukant@vidhukant.xyz>

 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

package invoice

import (
	"context"

	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/bson/primitive"
)

// add invoice to db
func saveInvoice(i Invoice) (primitive.ObjectID, error) {
	res, err := db.Collection("Invoices").InsertOne(context.TODO(), i)
	return res.InsertedID.(primitive.ObjectID), err
}

// add transporter to db
func saveTransporter(t Transporter) (primitive.ObjectID, error) {
	res, err := db.Collection("Transporters").InsertOne(context.TODO(), t)
	return res.InsertedID.(primitive.ObjectID), err
}

// add transport vehicle to db
func saveTransport(t *Transport) (primitive.ObjectID, error) {
	res, err := db.Collection("Transports").InsertOne(context.TODO(), t)
	return res.InsertedID.(primitive.ObjectID), err
}

// Delete invoice from DB
func deleteInvoice(id primitive.ObjectID) error {
	_, err := db.Collection("Invoices").DeleteOne(context.TODO(), bson.M{"_id": id})
	return err
}

// Delete transporter from DB
func deleteTransporter(id primitive.ObjectID) error {
	_, err := db.Collection("Transporters").DeleteOne(context.TODO(), bson.M{"_id": id})
	return err
}

// Delete transport vehicle from DB
func deleteTransport(id primitive.ObjectID) error {
	_, err := db.Collection("Transports").DeleteOne(context.TODO(), bson.M{"_id": id})
	return err
}

// modify invoice in DB
func modifyInvoice(id primitive.ObjectID, ni Invoice) error {
	_, err := db.Collection("Invoices").UpdateOne(context.TODO(), bson.D{{"_id", id}}, bson.D{{"$set", ni}})
	return err
}

// modify transporter in DB
func modifyTransporter(id primitive.ObjectID, nt Transporter) error {
	_, err := db.Collection("Transporters").UpdateOne(context.TODO(), bson.D{{"_id", id}}, bson.D{{"$set", nt}})
	return err
}

// modify transport in DB
func modifyTransport(id primitive.ObjectID, nt Transport) error {
	_, err := db.Collection("Transports").UpdateOne(context.TODO(), bson.D{{"_id", id}}, bson.D{{"$set", nt}})
	return err
}

/* GetInvoices queries the database and
 * returns invoices based on the given filter
 * if filter is nil every invoice is returned
 */
func getInvoices(filter bson.M) ([]Invoice, error) {
	var invoices []Invoice

	cursor, err := db.Collection("Invoices").Find(context.TODO(), filter)
	if err != nil {
		return invoices, err
	}

	err = cursor.All(context.TODO(), &invoices)
	return invoices, err
}

func getTransporters(filter bson.M) ([]Transporter, error) {
	var transporters []Transporter

	cursor, err := db.Collection("Transporters").Find(context.TODO(), filter)
	if err != nil {
		return transporters, err
	}

	err = cursor.All(context.TODO(), &transporters)
	return transporters, err
}

func getTransports(filter bson.M) ([]Transport, error) {
	var transports []Transport

	cursor, err := db.Collection("Transports").Find(context.TODO(), filter)
	if err != nil {
		return transports, err
	}

	err = cursor.All(context.TODO(), &transports)
	return transports, err
}

func getInvoiceByNumber(invoiceNumber int) (Invoice, error) {
	var invoice Invoice
	err := db.Collection("Invoices").FindOne(context.TODO(), bson.M{"InvoiceNumber": invoiceNumber}).Decode(&invoice)
	return invoice, err
}

func getInvoiceById(invoiceId primitive.ObjectID) (Invoice, error) {
	var invoice Invoice
	err := db.Collection("Invoices").FindOne(context.TODO(), bson.M{"_id": invoiceId}).Decode(&invoice)
	return invoice, err
}